0

あらゆる画面解像度のデバイスで動作するアプリケーションを設計したいと考えています。

そうする私の考えは、使用するビューのタイプごとに 1 つのカスタム ビューを作成し、XMLlayout_widthlayout_height指定された と を親サイズのパーセンテージとして使用することでした (たとえば、layout_width="100dp"は と同等fill_parentであり、layout_width="50dp"View幅は親の半分)。

私が作成したカスタムTextViewクラスは次のとおりです。

public class RSTextView extends TextView {

    public RSTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int w, int h) {
        int parentWidth = ((View)this.getParent()).getWidth();
        int parentHeight = ((View)this.getParent()).getHeight();
        Log.i(null, "Width: " + w + "; Height: " + parentHeight);
        this.setMeasuredDimension(parentWidth * MeasureSpec.getSize(w) / 100,
                parentHeight * MeasureSpec.getSize(h) / 100);
    }
}

しかし、うまくいきません。とサイズparentWidthparentHeight常に 0 です。

相対的なサイズのアプリケーションを作成するより良い方法はありますか?

それが正しい方法である場合View、メソッドから親のサイズを取得するにはどうすればよいonMeasureですか?

4

1 に答える 1

2

getMeasuredHeightレイアウト段階でビューの高さをチェックしているので、おそらくではなくを使用したいでしょうが、getHeightあなたがしていることをする必要があるかどうかはわかりません。あなたの説明からはわかりにくいですが、LinearLayout重みの動作を再現しようとしているようです。たとえば、3 つの子を持つ水平がある場合、それぞれ 2、1 、および 1の およびLinearLayoutを割り当てることで、最初の子がその幅の半分を占めるように設定し、他の子がそれぞれ 25% を占めるように簡単に設定できます。それらの比率の重み)。0px layout_widthlayout_weight

ただし、カスタム ルートに進むことにした場合はView、何layout_heightをオーバーロードしないでください。カスタム XML 属性を使用して、パーセンテージの引数を取得します (実装方法を確認するために のコードをlayout_width掘り下げます)。LinearLayoutlayout_weight

于 2010-11-30T16:47:20.417 に答える