2

レイアウトを動的に中央に配置する必要がありますが、問題は inflate メソッドを使用してレイアウトを追加することです。そして、ボタンを中央にしたい。

gravity、layout_gravityなどのxml属性を追加してみました。しかし、うまくいきませんでした。そして、パラメータを追加しようとしましたが、xml をインフレートしたため、パラメータを追加できません。addRule メソッドが使えないからです。

次に、ルートレイアウトにgravity属性を追加して、すべての要素を中心にしようとしましたが、うまくいきませんでした。

これが私のコードです。

activity_main.xml

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

    <SurfaceView
        android:id="@+id/surfaceView1"
        android:layout_width="match_parent"
        android:layout_height="335dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:id="@+id/buttons_layout"
        android:layout_below="@+id/surfaceView1"
        >

        <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="29dp"
        android:text="Button" />

    </RelativeLayout>



</RelativeLayout>

three_buttons_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="29dp"
        android:text="Button 1" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="29dp"
        android:text="Button 2" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 3" />

</LinearLayout>

そして、ここに私のJavaコードがあります

public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

     inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     parent = (ViewGroup)findViewById(R.id.buttons_layout);

     captureButton.setOnClickListener(new OnClickListener() {

     public void onClick(View v) {
        camera.takePicture(null, null, photoCallback);
        captureButton.setVisibility(View.GONE);
        inflater.inflate(R.layout.three_buttons_layout, parent, true);
            }
        });

Button1、Button2、および Button3 を中央に配置します。

スクリーンショット

4

2 に答える 2

1

//これを試して

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center" 
    >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 1" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 2" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 3" />

</LinearLayout>

//この下の行を親から削除して、水平方向の中央にすることができます

android:layout_gravity="center"
于 2012-09-20T13:01:01.183 に答える
1

水平 LinearLayout は常にそのサブビューを左揃えにします。必要な位置を取得するには、RelativeLayout を使用する必要があります。次のように、button1 に android:layout_alignParentLeft 属性、button2 に android:layout_centerHorizo​​ntal 属性、button3 に android:layout_alignParentRight 属性を与えることをお勧めします。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center" >

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_marginBottom="29dp"
    android:text="Button 1" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="29dp"
    android:text="Button 2" />

<Button
    android:id="@+id/button3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:text="Button 3" />

</RelativeLayout>

(コメント エディターでコードを編集しているだけなので、どこかに構文エラーがある可能性がありますが、わかります。)

また、ビューを膨張させた後、これらのボタンに必要な属性を設定できる必要があります。findViewById(R.id.button1) を呼び出すだけで、必要なビューが返されます (inflater.inflate 呼び出しの後である限り)。その点で、すべてのボタンに同じ ID を指定しましたが、これはおそらく良い考えではありません。

それが役立つことを願っています! それでもうまくいかない場合はお知らせください。

編集: RelativeLayout に android:layout_width="match_parent" が必要になることに気付きました。それに応じて上記のxmlを編集しました。

于 2012-09-20T12:56:28.673 に答える