2015-10-25 34 views
1

在過去的幾天裏,我一直在試圖弄清楚如何製作一個低於另一個的按鈕列表,並動態填充整個屏幕寬度。因此,例如:如何動態添加下面的按鈕

Image of stacked buttons, apparently I cant embed images yet.

(我便宜只是把一個已存在的截屏的有一個按鈕和編輯它paint.net使它看起來像按鈕疊加。)

所以,從本質上講,我有一個來自R的字符串列表,其中包括按鈕的名稱,我需要像這樣列出它們。我一直在環顧四周,如果我發現任何東西已經過時(並沒有工作)

這是我到目前爲止(它有點凌亂,因爲它包含許多嘗試,使這發生)

LinearLayout layout = (LinearLayout) findViewById(R.id.mainLayout); 

    Field[] fields = R.raw.class.getFields(); 

    for(int count=0; count < fields.length; count++){ 

     String filename = fields[count].getName(); 

     try { 
      Button button = new Button(this); 
      button.setText(filename); 
      button.setId(startID + 1 + count); //this variable is offscreen 
      button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        //finish later 
       } 

      }); 
      button.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 

      layout.addView(button); 

     } catch (Exception e) { 
      Toast.makeText(MainActivity.this, "Exception.", Toast.LENGTH_LONG).show(); 
     } 
    } 

(這是onCreate() FYI)

因此,如果任何人有我如何能做到這一點的任何解決方案/想法,請分享。我對創建android應用程序相當陌生。

+0

設置'LinearLayout'的方向垂直,因爲它是由默認水平。此外,'String's在'R.string'中,而不是'R.raw'。 –

+0

嗯,對不起。我的意思是像我有一個r.raw中的文件列表,我需要列出它們的名稱。但我現在要設定方向。 –

+0

哦,你也會想把'LayoutParams'的寬度參數改爲'MATCH_PARENT'。 –

回答

0

一個簡單的例子

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:id="@+id/linear" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:orientation="vertical"> 
    </LinearLayout> 

</RelativeLayout> 

的Java:

String[] names = { "button1", "button2", "button3", "button4" }; 

LinearLayout layout = (LinearLayout) findViewById(R.id.linear); 

for (int i = 0; i < 4; i++) { 
    Button button = new Button(this); 
    button.setText(names[i]); 
    button.setId(i); 
    button.setBackgroundColor(Color.BLUE); 

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
      LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
    params.setMargins(20, 0, 20, 20); // (left, top, right, bottom) 
    button.setLayoutParams(params); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // finish later 
     } 

    }); 
    layout.addView(button); 
0

你可能會更好學習如何使用ListViews,並使用適配器來填充含按鈕的ListView數組中的數據。請記住,對於您和Sajith Sageer提供的解決方案,當創建的按鈕過多時,按鈕將延伸到屏幕之外,除非您將LinearLayout包裝到ScrollView中,否則無法觸及按鈕。

0

的Java

LinearLayout layout = (LinearLayout) findViewById(R.id.layout); 

    String[] items = {"item 1", "item 2", "item 3", "item 4", "item 5"}; 

    for (int i = 0; i < items.length; i++) { 
     Button btn = new Button(this); 
     btn.setText(items[i]); 
     btn.setId(i); 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
       ViewGroup.LayoutParams.MATCH_PARENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT); 

     params.setMargins(10, 10, 10, 10); 
     btn.setLayoutParams(params); 
     layout.addView(btn); 
    } 

的Xml

<LinearLayout 
     android:id="@+id/layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
    </LinearLayout>