1

カスタム ChedckBox を作成しようとしていますが、そのボタン部分を中央に配置するのに問題があります。コードは次のとおりです。

<FrameLayout
    android:layout_width="@dimen/checkbox_height"
        android:layout_height="@dimen/checkbox_height"
        android:background="@drawable/checkbox_background_info"
        android:padding="5dp" >

        <CheckBox
            android:id="@+id/classification_uk_selected"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:button="@drawable/checkbox_star_info">

        </CheckBox>

</FrameLayout>

Drawbale には、有効な背景のない黄色の星と、無効な灰色の星があります。左側にとどまり、中央に配置できません

手伝ってくれてありがとう

4

3 に答える 3

1

FrameLayout を RelativeLayout に変更する場合は、android:center_in_parent を true に設定するだけです。

于 2012-05-04T15:37:57.447 に答える
0

私はこれが可能だとは思わない(少なくともAPIバージョン8ではない)

これは、CompoundButton.onDrawのコードです。これは、CompoundButtonが親ビューでオフセットが0の境界四角形内にbuttonDrawable(チェックボックス画像を表す)を描画することを示しているようです。

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    final Drawable buttonDrawable = mButtonDrawable;
    if (buttonDrawable != null) {
        final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK;
        final int height = buttonDrawable.getIntrinsicHeight();

        int y = 0;

        switch (verticalGravity) {
            case Gravity.BOTTOM:
                y = getHeight() - height;
                break;
            case Gravity.CENTER_VERTICAL:
                y = (getHeight() - height) / 2;
                break;
        }

        buttonDrawable.setBounds(0, y, buttonDrawable.getIntrinsicWidth(), y + height);
        buttonDrawable.draw(canvas);
    }
}

代わりに、チェックボックスの幅を、使用している画像のサイズよりもわずかに大きく(dp単位で)設定してみてください。これにより、描画可能なボタンが絞り込まれ、右側にすべての空白が表示されなくなります。

于 2012-06-08T01:14:28.043 に答える
0

フレームレイアウトで重力を中心に設定します。android:gravity="中心"

于 2012-05-04T15:44:49.290 に答える