2015-12-15 51 views
-2

我只是想在我知道的android中以編程方式創建按鈕。但事情是在一行中創建具有特定數字的按鈕,並且完全取決於屏幕的方向。以編程方式在android中創建按鈕

例如,如果在縱向模式下的設備我只需要在一排兩粒扣和景觀三個或四個(移動)和四個或五個(平板電腦)與對齊

任何建議或想法會是有幫助的

編輯
我曾嘗試下面的代碼和得到的東西

Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 


    pwidth = size.x; 
    lHeight = size.x; 

    pheight = size.y; 
    lWidth = size.y +16; 

    scrollView = new ScrollView(MainActivity.this); 
    scrollView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); 

    gl = new GridLayout(MainActivity.this); 

    gl.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    gl.setOrientation(GridLayout.HORIZONTAL); 

    int orientation = this.getResources().getConfiguration().orientation; 

    if (orientation == Configuration.ORIENTATION_PORTRAIT) { 
     //code for portrait mode 
     Toast.makeText(getApplicationContext(), "PORTRAIT", Toast.LENGTH_SHORT).show(); 

     if (pheight > pwidth) { 
      columnSize = pheight/pwidth; 
      gl.setColumnCount(columnSize + 1); 
      gl.setRowCount(columnSize + 1); 

      Log.i("PORTRAIT WIDTH", String.valueOf(pwidth)); 
      Log.i("PORTRAIT HEIGHT", String.valueOf(pheight)); 
      Log.i("PORTRAIT COLUMN SIZE ", String.valueOf(columnSize)); 
      Log.i("PORTRAIT ROW SIZE ", String.valueOf(rowSize)); 
     }/*else if(width>height){ 

     }*/ 

    } else { 
     //code for landscape mode 
     Toast.makeText(getApplicationContext(), "LANDSCAPE", Toast.LENGTH_SHORT).show(); 

     if (lWidth < lHeight) { 
      columnSize = lWidth/400; 
      gl.setColumnCount(columnSize + 1); 
      gl.setRowCount(columnSize); 

      Log.i("LANDSCAPE WIDTH", String.valueOf(lWidth)); 
      Log.i("LANDSCAPE HEIGHT", String.valueOf(lHeight)); 
      Log.i("LANDSCAPE COLUMN SIZE ", String.valueOf(columnSize)); 
      Log.i("LANDSCAPE ROW SIZE ", String.valueOf(columnSize)); 
     } 
    } 

    Log.i("ROW SIZE ", String.valueOf(columnSize)); 

    button = new Button[9]; 

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

     GridLayout.LayoutParams param = new GridLayout.LayoutParams(); 
     param.height = 200; 
     param.width = GridLayout.LayoutParams.WRAP_CONTENT; 
     param.rightMargin = 100; 
     param.topMargin = 100; 
     param.leftMargin = 100; 

     param.setGravity(Gravity.CENTER); 

     button[i] = new Button(MainActivity.this); 
     button[i].setLayoutParams(param); 
     button[i].setText("Button " + String.valueOf(i)); 
     button[i].setTextSize(20); 
     button[i].setPadding(50, 50, 50, 50); 
     gl.addView(button[i]); 
    } 

    scrollView.addView(gl); 
    setContentView(scrollView); 

    for (item = 0; item < 9; item++) { 
     button[item].setOnClickListener(new View.OnClickListener() { 

      int pos = item; 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       Toast.makeText(getBaseContext(), pos + " Clicked", 
         Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

Portrait Landscape

+0

只需保持方向固定。這是首先想到的想法。 –

+0

實際上,我會說它最終取決於父ViewGroup的寬度,所以你可以檢查一下,看看有多少個Buttons適合。或者,使用類似[[FlowLayout]](http://stackoverflow.com/questions/4474237/how-can-i-do-something-like-a-flowlayout-in-android),如果你不想要做數學。 –

+0

爲縱向和橫向模式創建單獨的佈局。 – Sharath

回答

0

聲明整數文件中不同資源限定符的列數。 比方說,

在RES /價值/ integers.xml聲明

<integer name="num_of_cols">2</integer> 

在res /價值觀土地/ integers.xml聲明

<integer name="num_of_cols">3</integer> 

在res /價值觀sw600dp /整數.XML申報

<integer name="num_of_cols">4</integer> 

在res /值-sw720dp/integers.xml申報

<integer name="num_of_cols">6</integer> 

等等。使用此整數值programmaticaly來定義添加按鈕時的列數。

+0

如何使用integer.xml? – JUL2791

+0

與strings.xml相同 –

0

首先,您需要獲取屏幕大小,高度和寬度。假設按鈕的寬度和高度爲80像素。右邊和左邊的邊距是10px:

Display display = getWindowManager().getDefaultDisplay(); 
Log.d(TAG,"Display"+display.toString()); 

Point size = new Point(); 
display.getSize(size); 

int width = size.x; 
int height = size.y; 

Log.d(TAG,"WIDTH:"+width); 
Log.d(TAG,"HEIGHT:"+height); 

int sizeOfButtonHeight = 100; 
int sizeOfButtonWidth = 100; 

RelativeLayout layout = new RelativeLayout(this); 


int numberOfRows = height/sizeOfButtonHeight + 20; 
Log.d(TAG,"NUMBER OF ROWS :"+numberOfRows); 
int numberOfButtons = width/sizeOfButtonWidth + 20; 


TableLayout layoutTable = new TableLayout(this); 

for (int i = 1; i < numberOfRows; i++) { 
    int count = 1; 
    TableRow layoutRow = new TableRow(this); 
    layoutRow.setId(2000 + i); 
    LinearLayout.LayoutParams paramsRow = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 

    //paramsRow.topMargin = i * sizeOfButtonHeight; 
    paramsRow.gravity = Gravity.CENTER_VERTICAL; 

    layoutRow.setLayoutParams(paramsRow); 

    while (width > 100) { //button width plus margins 
     Button button = new Button(this); 
     button.setId(1000 + count); 
     button.setMinWidth(80); 
     button.setText("BUTTON"); 

     TableRow.LayoutParams paramsButton = new TableRow.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, count); 
     paramsButton.width = sizeOfButtonWidth; 
     paramsButton.height = sizeOfButtonHeight; 

     paramsButton.topMargin = i * sizeOfButtonHeight; 

     paramsButton.gravity = Gravity.CENTER; 
     button.setLayoutParams(paramsButton); 
     layoutRow.addView(button); 
     width -= 100; 
     count++; 
    } 
    layoutTable.addView(layoutRow, i-1); 
} 
layout.addView(layoutTable); 
setContentView(layout); 
+0

您的代碼是否行得通?爲什麼因爲即使在您編碼爲 – JUL2791

+0

之後修復了錯誤,我仍然收到應用程序崩潰發佈您的堆棧跟蹤。 –

+0

我編輯答案。現在就試試。 –

相關問題