1

私はAndroidプログラミングに不慣れです。

私の質問は、サブビューの幅と高さを決定するための最良の方法は何ですか?

入力用のピアノ鍵盤を含むアプリケーションを書いています。

カスタムビュー、PianoKeyboardViewがあります。キーボードを描画するには、ビューの寸法を知る必要があります。次のコードの幅と高さをPianoKeyboardViewに詰め込むと、ピアノのキーボードは正常に描画されます。

Display display = ((WindowManager) this 
        .getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

    int width = display.getWidht();
    int height = display.getHeight();

明らかに、私はこれをしたくありません。

EclipseでデフォルトのAndroidアプリケーションを作成し、FullScreenオプションを選択しました。onCreateのデフォルトコードは次のとおりです。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_fullscreen);

    final View controlsView = findViewById(R.id.fullscreen_content_controls);
    final View contentView = findViewById(R.id.fullscreen_content);

デフォルトのビューでgetWidth()とgetHeight()を呼び出すと、0が返されます。

    int width = controlsView.getWidth();
    int height = controlsView.getHeight();
    width = contentView.getWidth();
    height = contentView.getHeight();

私のPianoKeyboardViewの幅と高さも0であり、それが私の問題です。

私のactivity_fullscreen.xmlは、すべてのビューの幅と高さを「match_parent」として設定します</ p>

<FrameLayout    
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true" >

    <LinearLayout
        android:id="@+id/fullscreen_content_controls"
        style="?buttonBarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|center_horizontal"
        android:background="@color/black_overlay"
        android:orientation="horizontal"
        tools:ignore="UselessParent" >

        <com.application.piano.PianoKeyboardView
        android:id="@+id/keyboard_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
             android:layout_weight="1"
        />

ありがとう。

4

2 に答える 2

0
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_fullscreen);

    final View controlsView = findViewById(R.id.fullscreen_content_controls);
    final View contentView = findViewById(R.id.fullscreen_content);

    ViewTreeObserver viewTreeObserver = controlsView.getViewTreeObserver();
    viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                int width = controlsView.getWidth();
                int height = controlsView.getHeight();
                return true;
            }
    });

これがお役に立てば幸いです。

于 2012-12-28T05:50:48.553 に答える
0

これに基づいて何かを試すことができます...(関連する質問への私の回答からコピー)。

私は次の手法を使用します-onCreate()ビューが作成されたときに実行されるランナブルを投稿します。

    contentView = findViewById(android.R.id.content);
    contentView.post(new Runnable()
    {
        public void run()
        {
            contentHeight = contentView.getHeight();
        }
    });

このコードは、終了後にメインUIスレッドで実行されますonCreate()。その時点で、ビューにはサイズがあります。

于 2014-01-29T09:30:10.623 に答える