除了(或代替)CheckBoxes之外,如果您对RadioButtons感兴趣,请参阅this问题。
尽管存在
<item name="android:layout_gravity">center_horizontal</item>
样式文件中的,两个复选框不居中,但显示为“左对齐”。
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>
答案 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
如果您正在使用带有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>
这是我得到的输出: