【问题标题】:Creating multiple(26) buttons in one layout screen在一个布局屏幕中创建多个 (26) 按钮
【发布时间】:2016-11-30 11:45:59
【问题描述】:

尝试创建一个简单的 ABCs 和 123s 应用。我的初始布局有两个按钮,一个用于字母,一个用于数字。如果单击字母按钮,我想转到下一个片段,该片段将为所有字母 (A-Z) 保留 26 个按钮。对于数字,10 个按钮 (0-9)。我的问题是,我如何有效地填充具有 26 个按钮/10 个按钮的布局文件,而不将每个按钮都写入 XML 文件?

【问题讨论】:

  • 你可以作为网格布局并放置按钮。
  • @lsiva 尽管我们期望用户写出清晰的问题,但我们也应该期望得到清晰的答案和 cmets。这……没有任何意义。 OP,您可能想向我们展示您迄今为止尝试过的代码。

标签: java android xml button layout


【解决方案1】:

您可以以编程方式将按钮添加到视图。在片段的 onCreateView 函数中试试这个。

//mView is your fragment root, and container is defined in XML
LinearLayout container = (LinearLayout)mView.findViewById(R.id.alpha_container)

String[] letters = {A, B, C, ..., Z};

for(int i=0; i<letters.length; i++) { 
   Button letter_btn = new Button(getActivity());
   letter.setText(letters[i]);
   container.addView(letter_btn, i);
}

这将以编程方式为 letters 数组中的每个元素创建一个按钮。您可以相应地附加 onClickListener(s) 并通过文本内容跟踪按钮或给它们一个标签/ID。

【讨论】:

  • 我必须在该片段的布局文件中包含什么?框架布局,recyclerview?有什么事吗?
  • 一个 LinearLayout,(或任何 ViewGroup)就足够了。
  • 如果您正在寻找强大的功能集(例如添加和删除按钮以及处理许多事件),我建议您使用带有适配器的视图(例如 GridView/Listview)。 @SaravInfern 的回答完全可以接受
【解决方案2】:

使用网格视图

活动 xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/gridview"
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent"
   android:columnWidth="90dp"
   android:numColumns="auto_fit"
   android:verticalSpacing="10dp"
   android:horizontalSpacing="10dp"
   android:stretchMode="columnWidth"
   android:gravity="center"
/>

你的活动

public class MainActivity extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      GridView gridview = (GridView) findViewById(R.id.gridview);
      gridview.setAdapter(new GridAdapter (this));
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }
}

gridView 适配器

public class GridAdapter extends BaseAdapter {
   private Context mContext;

   // Constructor
   public GridAdapter (Context c) {
      mContext = c;
   }

   public int getCount() {
      return alphabets.length;
   }

   public Object getItem(int position) {
      return null;
   }

   public long getItemId(int position) {
      return 0;
   }

   // create a new TextView for each item referenced by the Adapter
   public View getView(final int position, View convertView, ViewGroup parent) {
      TextView txView;

      if (convertView == null) {
         txView= new TextView (mContext);
         txView.setLayoutParams(new GridView.LayoutParams(85, 85));
         txView.setPadding(8, 8, 8, 8);
      } 
      else 
      {
         txView= (TextView) convertView;
      }
      txView.setText(alphabets[position]);

       **Update**
       txView.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
            //your code here
               switch(position){
                case 0:
                    Toast.makeText(this,"A",Toast.LENGTH_LONG).show();
                break;
                case 1:
                    Toast.makeText(this,"B",Toast.LENGTH_LONG).show();
                break;
                ........SoOn
               }

           }});


      return txView;
   }

   //  array
   public String[] alphabets= {
      "A","B","C","D"
   };
}

【讨论】:

  • 我能够实现它并使它们成为 26 个按钮。但我有两个问题,1)按钮的大小很小,我似乎无法更改它们的大小,2)我如何将 onClickListeners 添加到所有这些按钮?
  • txView.setLayoutParams(new GridView.LayoutParams(85, 85));//在此处更改宽度,高度..查看更新的答案,如果有帮助请接受答案
  • 一个 onClickListener 如何为所有按钮工作?我不是每个字母/数字都需要一个吗?因为我希望每个按钮转到一个单独的字母,但它们都应该连接起来,因为它将是一个查看器。另外,非常感谢您的帮助,您是什么意思接受答案? (我认为我的声望太少了)
  • 编辑了我的答案试试
猜你喜欢
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2012-03-01
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
相关资源
最近更新 更多