2016-10-21 2 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

를 사용하여 수직의 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 = (길이/numberOfButtonsPerLine) + 1; int numberOfLines = 5; // 예 : 스크립트가 실행되기 시작하지만 그 후에도 정지되고 중단됩니다. 이유가 무엇인지 이해하는 방법? –

+0

오류를 쓸 수 있습니까? – Kuvalya

0

GridLayout은 시나리오에 가장 적합한 옵션입니다. GridLayout을 사용하면 화면 너비를 계산할 필요가 없습니다.

아래 링크에서 가이드를 찾을 수 있습니다. XML에서

GridView guide

+0

TNX하지만 –

관련 문제