中心CheckBox视图

时间:2013-05-22 17:43:48

标签: android android-styles

除了(或代替)CheckBoxes之外,如果您对RadioButtons感兴趣,请参阅this问题。

尽管存在

<item name="android:layout_gravity">center_horizontal</item>
样式文件中的

,两个复选框不居中,但显示为“左对齐”。

non-centered

RES /布局/ activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MyLL"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <CheckBox
        android:id="@+id/cb1"
        style="@style/CB_style" />

    <CheckBox
        android:id="@+id/cb2"
        style="@style/CB_style" />

</LinearLayout>

RES /值/ styles.xml

<style name="CB_style" parent="@android:style/TextAppearance.Medium">
    <item name="android:layout_gravity">center_horizontal</item>
    <item name="android:layout_weight">1</item>
    <item name="android:gravity">center</item>
    <item name="android:checked">false</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
</style>

7 个答案:

答案 0 :(得分:1)

你有android:layout_weight = 1.所以你的复选框填满了屏幕的所有宽度。 从样式中删除android:layout_weight并在复选框之间添加边距。

复选框中的重力不会影响内部勾选按钮,只影响文本。

修改

好的,试试这个:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MyLL"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <TextView
        android:layout_width="0dp"
        android:layout_height="5dp"
        android:layout_weight="1"/>

    <CheckBox
        android:id="@+id/cb1"
        style="@style/CB_style" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="5dp"
        android:layout_weight="1"/>

    <CheckBox
        android:id="@+id/cb2"
        style="@style/CB_style" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="5dp"
        android:layout_weight="1"/>

</LinearLayout>

从样式中删除layout_weight。

另一种方法是创建自定义复选框。但我觉得这个问题太复杂了。

答案 1 :(得分:0)

这可能会有所帮助:

android:gravity vs android:layout_gravity

  • android:gravity通常是内部的,通常会询问视图本身如何处理它所拥有的像素
  • android:layout_gravity通常是外部的,通常会询问父ViewGroup(LinearLayout / RelativeLayout / FrameLayout)如何使用视图未使用的额外像素定位视图

如果您正在使用带有wrap_content的视图,则可能需要使用layout_gravity。如果您使用的是match_parent视图,则可能需要尝试重力。

有时在麻烦的View周围包装另一个ViewGroup可以帮助定位。 Views和ViewGroup经历了复杂的“屏幕空间”协商阶段,不同的视图(Buttons / TextView / ImageView / etc)和ViewGroups(LinearLayout / RelativeLayout / TableLayout / etc)具有不同的规则和协商能力

这就是为什么有时将麻烦的视图与另一个父视图(如FrameLayout或LinearLayout)配对可能会使其突然出现

答案 2 :(得分:0)

这有点乱,但它确实有效,是的,它可以用于3个或更多复选框输入:

 <LinearLayout
                        android:padding="0dip"
                        android:layout_width="0dp"
                        android:layout_weight="1"
                        android:hint="name"
                        android:layout_height="40dip"
                        android:textAlignment="center" android:layout_gravity="center"
                        android:orientation="horizontal"
                        >
                        <TextView
                            android:layout_width="0dip"
                            android:layout_height="1dip" android:layout_weight="1" android:text=" " />
                        <CheckBox
                            android:id="@+id/chk1"
                            android:layout_width="wrap_content"
                            android:layout_height="fill_parent"
                            android:scaleX="1.5" android:scaleY="1.5"
                            >
                        </CheckBox>
                        <TextView
                            android:layout_width="0dip"
                            android:layout_height="1dip" android:layout_weight="1" android:text=" " />
                        <CheckBox
                            android:id="@+id/chk2"
                            android:layout_width="wrap_content"
                            android:layout_height="fill_parent"
                            android:scaleX="1.5" android:scaleY="1.5"
                           >
                        </CheckBox>
                        <TextView
                            android:layout_width="0dip"
                            android:layout_height="1dip" android:layout_weight="1" android:text=" " />                            
                    </LinearLayout>

答案 3 :(得分:0)

尝试风格

 <item name="android:layout_width">0dp</item>

我希望它能奏效..谢谢..

答案 4 :(得分:0)

<style name="TextlessCheckBox" parent="android:Widget.Material.CompoundButton.CheckBox">
    <item name="android:button">@null</item>
    <item name="android:foreground">?android:listChoiceIndicatorMultiple</item>
    <item name="android:foregroundGravity">center</item>
</style>

答案 5 :(得分:-1)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/MyLL"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="horizontal" >

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="0.5"
    android:background="#ff0000"
    android:gravity="center" >
    <CheckBox
        android:id="@+id/cb1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="0.5"
    android:background="#00FF00"
    android:gravity="center" >
<CheckBox
    android:id="@+id/cb2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
 </LinearLayout>

好的,今天最后一次尝试;)你应该下次发布一张图片,它应该看起来如何......好吧,现在你将你的LinearLayout分成两个相似的宽部分(红色和绿色),并且每个阻止你的复选框位于中心...这次我做对了吗?!

答案 6 :(得分:-1)

只需将其添加到 LinearLayout

即可
android:gravity="center_horizontal"

此行指定此布局中的任何内容都位于中心。 完整布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">


    <CheckBox
        android:id="@+id/cb1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CheckBox ONE"
        />

    <CheckBox
        android:id="@+id/cb2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CheckBox TWO" />


</LinearLayout>

这是我得到的输出:

enter image description here