0

正方形のボタンを作りたいのですが、ボタンの高さに割り当てる幅をXMLで取得できないので、Javaでやっています。だから私はこれを行います:

View body = inflater.inflate(R.layout.picker_numeric, null);
Button up = (Button) body.findViewById(R.id.picker_numeric_up);
Log.d(TAG, "" + up.getWidth());
int height = up.getWidth();
up.setHeight(height);
........................
AlertDialog.Builder builder = new AlertDialog.Builder(activity)
        .setTitle(title)
        .setView(body)
........................

私はそれが0Log.dを返すことを確認していましたgetWidth().なぜこれが起こるのか誰でも知っていますか? 私には選択肢がありません。

編集:MKJParekhSimonが私のコードはこれだと言った後:

dialogContent.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/picker_numeric_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:baselineAligned="false"
android:padding="@dimen/padding_small"
android:weightSum="3"
tools:ignore="HardcodedText,UselessParent" >

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical" >

    <Button
        android:id="@+id/picker_numeric_up"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/padding_medium"
        android:layout_marginRight="@dimen/padding_medium"
        android:gravity="center"
        android:text="+" />

    <EditText
        android:id="@+id/picker_numeric_value"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/padding_medium"
        android:layout_marginRight="@dimen/padding_medium"
        android:gravity="center"
        android:inputType="number" />

    <Button
        android:id="@+id/picker_numeric_down"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/padding_medium"
        android:layout_marginRight="@dimen/padding_medium"
        android:gravity="center"
        android:text="-" />
</LinearLayout>
</LinearLayout>

ダイアログの作成者クラスのメソッド:

public void equalDimens() {
    up.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
               MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    int height = up.getMeasuredWidth();
    android.util.Log.d("dd", ""+height);
    up.setLayoutParams(new LinearLayout.LayoutParams(height, height));
    down.setLayoutParams(new LinearLayout.LayoutParams(height, height));
}

次に、アクティビティのクラスで:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    createMyDialog();
    LinearLayout mainLayout = (LinearLayout ) this.getLayoutInflater().inflate(R.layout.main, null); 
    mainLayout.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() {
         public void onGlobalLayout() {
            myDialogClass.equalDimens();
         }
    });

    setContentView(mainLayout);
}


電話せずmyDialogClass.equalDimens()にこれを取得します: ここに画像の説明を入力

メソッドを呼び出すと、次のようになります。

ここに画像の説明を入力

4

2 に答える 2

1

measureビューの高さと幅を取得する前に、ビューが必要です。

あなたはこのようにすることができます、ここll2にあなたの任意のビューオブジェクトがあります

ll2.measure(
        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

int height = ll2.getMeasuredHeight();
int width = ll2.getMeasuredWidth();

高さと幅を取得したら、次のように設定する必要があります。

ll2.setLayoutParams(new LayoutParams(width, height));
于 2012-11-02T14:25:33.320 に答える
0

ビューは測定され、膨張していますが、onCreate ではまだ描画されていません。

(他のソリューションの中でも)次を使用できます。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    // get width here
}

アクティビティから生成されたダイアログ ボックスがあるなど、これを使用できない場合は、グローバル レイアウト リスナーを試してください。

public void onCreate(Bundle savedInstanceState)
 {
     super.onCreate(savedInstanceState);

     // inflate your main layout here (use RelativeLayout or whatever your root ViewGroup type is
     LinearLayout mainLayout = (LinearLayout ) this.getLayoutInflater().inflate(R.layout.main, null); 

     // set a global layout listener which will be called when the layout pass is completed and the view is drawn
     mainLayout.getViewTreeObserver().addOnGlobalLayoutListener(
     new ViewTreeObserver.OnGlobalLayoutListener() {
          public void onGlobalLayout() {
               // measure your views here
          }
     }
 );

 setContentView(mainLayout);

}

于 2012-11-02T14:11:13.407 に答える