2012-01-25 6 views
0

リニアレイアウトで設定ボタンを使用し、ボタン構成をプログラムで設定します。複数の解像度に対してプログラム的にボタンレイアウトをより適切に設定するには

buttonEdit = new ArrayList<ButtonData>(); 
buttonEdit.add(new ButtonData(1, "one", R.drawable.1)); 
buttonEdit.add(new ButtonData(2, "two", R.drawable.2)); 
buttonEdit.add(new ButtonData(3, "three", R.drawable.3)); 
buttonEdit.add(new ButtonData(4, "four", R.drawable.4)); 
buttonEdit.add(new ButtonData(5, "five", R.drawable.5)); 

LayoutParams lp=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
for (ButtonData button : buttonEdit) { 
    Button btn = new Button(getApplicationContext()); 
    btn.setId(button.getButtonID()); 
    btn.setBackgroundResource(button.getBackgroundResource()); 
    btn.setOnClickListener(buttonOnclickListener); 
    btn.setHeight(56); 
    btn.setWidth(48); 

    LinearLayout ll = new LinearLayout(getApplicationContext()); 
    ll.setLayoutParams(lp); 
    ll.setOrientation(LinearLayout.VERTICAL); 
    ll.setPadding(10, 0, 10, 0); 

    btn.setGravity(Gravity.CENTER_HORIZONTAL); 
    TextView textLabel = new TextView(getApplicationContext()); 
    textLabel.setText(button.getButtonName()); 
    ll.addView(btn); 
    ll.addView(textLabel); 

    linearLayoutData.put(String.valueOf(button.getButtonID()), ll); 
    buttonObject.put(String.valueOf(button.getButtonID()), btn); 
} 

コードリストでは、左右に10のパディングを設定しました。ユーザーはボタン間に別のスペースを表示できます。問題は、複数の解像度(QVGA、HVGA、WVGA)でアプリをインストールすると、アプリの間隔が違うことです。 QVGAでは幅が広く、WVGAでは狭いです。何をしたらいいでしょう?

答えて

0

xmlで定義されたレイアウトを使用して、オブジェクトが画面上でどのように見えるかを判断することをお勧めします。 xmlにレイアウトを定義するときは、画面の解像度に応じた間隔のdpの論理単位を使用できます。そのような(あなたがファイルにbutton_layout.xmlと呼ばれることを定義想像):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:padding="4dp"> 

    <TextView android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
    android:textSize="16.0sp" /> 

    <Button android:id="@+id/my_button" 
     android:layout_width="wrap_content" 
     android:layout_marginLeft="10dip" 
     android:layout_marginRight="10dip"/> 
</LinearLayout> 

注意をdpdip測定単位は同義語であることを。

LayoutInflater inflater; 
inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
LinearLayout linearLayout = (TableLayout) inflater.inflate(R.id.button_layout, null); 
linearLayout.findViewById(R.id.line_id).setText("One"); // Or two or three as you wish 
main_activity_layout.addView(linearLayout); //adding yet another button 

これは、あなたがレイアウトを使用する方法を例示のみとして来る:

は、その後、プログラムで使用すると、基本的にはのような何かをこれらすべての要素と一緒に1つの以上のボタンを追加する必要がある場合。実際に必要なプロパティでレイアウトを定義することができ、場合によってはすべての場合に固有のプロパティをプログラムで設定することもできます。最も重要なことは次のとおりです。 - レイアウトを理解しやすくなります - 余白と埋め込みなどをdpの相対単位で指定します。

EDIT:コードでこれが行われていることを本当に主張すれば、hereはプログラムでdpを指定する方法です。それでもレイアウトソリューションを可能な限り使用することをお勧めします。

+0

@BorisStrandjev、xmlで定義された使用レイアウトの提案に感謝します。私のアプリはちょうど非常に動的なので、xmlを使用しないでください。 問題は複数の解像度で異なるパディング尺度です。どうすればdp/dip測定値をプログラムで記述することができますか? –

+0

dpsをプログラムで得る方法を編集で追加しました。 –

+0

多くの感謝.. :) –

関連する問題