5

親を埋めるように設定するときに、ボタンの高さを幅に合わせて設定したいAndroid XMLのレイアウトに取り組んでいます。明らかに、この数は画面サイズに基づいて変化するため、設定されたピクセル サイズを使用することはできません。画面サイズに基づいてボタンの幅を取得し、それを高さの設定に渡すのを手伝ってくれる人はいますか?

ありがとう、ジョシュ

4

2 に答える 2

3

私はかつて同様の問題を抱えていましたが、XML だけで機能する解決策は見つかりませんでした。onMeassure独自の Button-Class を作成し、[ ][1] メソッドを上書きする必要があります。

例:

/**
 * @see android.view.View#measure(int, int)
 */
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec));
}

private int width; // saves the meassured width


/**
 * Determines the width of this view
 * 
 * @param measureSpec
 *            A measureSpec packed into an int
 * @return The width of the view, honoring constraints from measureSpec
 */
private int measureWidth(int measureSpec) {
    int result = 30;
    int specMode = MeasureSpec.getMode(measureSpec);
    int specSize = MeasureSpec.getSize(measureSpec);

    if (specMode == MeasureSpec.EXACTLY) {
        // We were told how big to be
        result = specSize;
    } else {
        result =1123; // meassure your with here somehow
        if (specMode == MeasureSpec.AT_MOST) {
            // Respect AT_MOST value if that was what is called for by measureSpec
            result = Math.min(result, specSize);
        }
    }
            width = result;
    return result;
}

/**
 * Determines the height of this view
 * 
 * @param measureSpec
 *            A measureSpec packed into an int
 * @return The height of the view, honoring constraints from measureSpec
 */
private int measureHeight(int measureSpec) {
    int result = 0;
    int specMode = MeasureSpec.getMode(measureSpec);
    int specSize = MeasureSpec.getSize(measureSpec);

    if (specMode == MeasureSpec.EXACTLY) {
        // We were told how big to be
        result = specSize;
    } else {
        result = width;
        if (specMode == MeasureSpec.AT_MOST) {
            // Respect AT_MOST value if that was what is called for by measureSpec
            result = Math.min(result, specSize);
        }
    }

    return result;
}

[1]: http://developer.android.com/reference/android/view/View.html#onMeasure(int , int)

于 2010-10-15T11:43:33.167 に答える
-1

Pixel size by PX を使用する代わりに、dip (つまり、デバイスに依存しないピクセル) に言及します。dip は、デバイスの画面サイズに応じてピクセル単位のサイズを個別に取得します。

例: android:textSize="12dip"

dipまたはdpのいずれかを使用できます。

楽しみ!!

于 2010-10-15T10:48:54.493 に答える