2016-10-21 3 views
0

私はあなたの助けが必要です。ボタンを使って行を移動する方法は?

小さなアプリケーションを作ったので、「タイル」ボタンを持ってくる必要があります。

public class letterms extends AppCompatActivity { 

    String[] mArray; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.letterms); 

     int length =0; 

     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 
       LinearLayout.LayoutParams.WRAP_CONTENT); 

     length =getResources().getStringArray(R.array.let_terms).length; 

     mArray = getResources().getStringArray(R.array.let_terms); 

     final LinearLayout linearLayout=(LinearLayout)findViewById(R.id.buttonlayout); 

     for(int i=0;i<length;i++){ 

      final String nazv = mArray[i]; 
      final String[] splittedItem = nazv.split(":"); 

       Button button=new Button(this); 
       button.setId(i); 
       button.setWidth(20); 
      button.setLayoutParams(params); 
       button.setText(splittedItem[0]); 
       button.setTextColor(0xFF2C85A6); 
       button.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 

         Intent is = new Intent(getApplicationContext(), termin_full.class); 
         is.putExtra("fVariableName", nazv); 
         startActivity(is); 
        } 
       }); 

       linearLayout.addView(button); 
     } 

    } 
} 

XMLでは:今すぐ

私は手紙

<string-array name="let_terms"> 
     <item>A</item> 
     <item>B</item> 
     <item>C</item> 
...... 

そして、プログラムで出力ボタンこれらの文字との配列持ち

<LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/buttonlayout"> 

     </LinearLayout> 

すべての権利を、バットを行きますボタンが連続していて、画面の最後に到達すると新しい行を続けたいと考えています。どのようにタイルするか...

このような実装の例はどこにありますか?

答えて

0

XMLで使用垂直のLinearLayout。次に、プログラムで水平のLinearLayoutを作成し、水平レイアウトでボタンを追加します。各行について、新しい水平レイアウトを作成して追加します。

XML:

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

活動

public class letterms extends AppCompatActivity { 

    String[] mArray; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.letterms); 

     int length =0; 

     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 
       LinearLayout.LayoutParams.WRAP_CONTENT); 

     length =getResources().getStringArray(R.array.let_terms).length; 

     mArray = getResources().getStringArray(R.array.let_terms); 

     final LinearLayout verticalLayout= LinearLayout)findViewById(R.id.buttonlayout); 

     int verticalWidth = verticalLayout.getWidth(); 
     int numberOfButtonsPerLine = (verticalWidth/buttonWidth); 
     int numberOfLines = (length/numberOfButtonsPerLine) + 1; 

     for(int i=0;i<length;){ 
      LinearLayout newLine = new LinearLayout(this); 
      newLine.setLayoutParams(params); 
      newLine.setOrientation(LinearLayout.HORIZONTAL); 
      for(int j=0;j<numberOfLines;j++){ 

      final String nazv = mArray[i]; 
      final String[] splittedItem = nazv.split(":"); 

       Button button=new Button(this); 
       button.setId(i); 
       button.setWidth(20); 
       button.setLayoutParams(params); 
       button.setText(splittedItem[0]); 
       button.setTextColor(0xFF2C85A6); 
       button.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 

         Intent is = new Intent(getApplicationContext(), termin_full.class); 
         is.putExtra("fVariableName", nazv); 
         startActivity(is); 
        } 
       }); 

       newLine.addView(button); 
       i++; 
       if(i>=length) { 
        break; 
       } 
      } 
      verticalLayout.addView(newLine); 

     } 

    } 
} 
+0

はクールに動作しない何かが、スクリプトが正常にコンパイルが、アプリケーションがクラッシュした –

+0

私が行うと // int型numberOfLines = (length/numberOfButtonsPerLine)+ 1; int numberOfLines = 5; //たとえば、 スクリプトは実行され始めますが、フリーズしてクラッシュします。 理由は何ですか? –

+0

エラーを書き込めますか? – Kuvalya

0

あなたのシナリオには、GridLayoutが最適です。 GridLayoutにより、画面の幅を計算する必要はありません。

このガイドは、下のリンクからご覧いただけます。

GridView guide

+0

TNX、しかし –

関連する問題