将单选按钮安排在文本下方,并完美地位于所有 android 设备的中心

Posted

技术标签:

【中文标题】将单选按钮安排在文本下方,并完美地位于所有 android 设备的中心【英文标题】:Arranging radio buttons just below the text and perfectly in center for all android devices 【发布时间】:2013-10-29 17:24:22 【问题描述】:

我想在文本下方安排单选按钮,但我做不到。我使用过 android:layout_marginLeft="20dp" 但它仅适用于特定设备而不适用于所有设备。

<LinearLayout
    android:layout_
    android:layout_
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/txt1"
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:background="#ff0000"
        android:gravity="center"
        android:text="red" />

    <TextView
        android:id="@+id/txt2"
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:background="#00ff00"
        android:gravity="center"
        android:text="green" />

    <TextView
        android:id="@+id/txt3"
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:background="#0000ff"
        android:gravity="center"
        android:text="blue" />
</LinearLayout>

<RadioGroup
    android:id="@+id/rg_rgrp"
    android:layout_
    android:layout_
    android:orientation="horizontal"
    android:weightSum="3" >

    <RadioButton
        android:id="@+id/rbtn_red"
        android:layout_
        android:layout_
        android:layout_gravity="center"
        android:layout_weight="1"
        android:gravity="center" />

    <RadioButton
        android:id="@+id/rbtn_green"
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:gravity="center" />

    <RadioButton
        android:id="@+id/rbtn_blue"
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:gravity="center" />
</RadioGroup>

我同时使用了 Gravity 和 layout_gravity,但它适用于文本而不是单选按钮。

【问题讨论】:

你能显示你想要什么样的输出。 您已将方向设置为水平。将其设置为垂直。每件事都将按线性顺序排列。为什么 RadioGroup 不在 LinearLayout 标签中? 对不起。我无法上传图片。但我希望 3 个文本彼此相邻,并且在这 3 个文本下方,3 个单选按钮应该正好位于文本的中心。对于垂直它根本不起作用。并且radiogroup在父线性布局下,代码中显示的是textview。 显示图片。如果您不能在此处上传,请上传here 并在此处放置链接.. 发布任何截图.. 【参考方案1】:

您的RadioGroup 应如下所示。无需代码。

<RadioGroup
    android:id="@+id/rg_rgrp"
    android:layout_
    android:layout_
    android:orientation="horizontal" >
    <View
        android:layout_
        android:layout_
        android:layout_weight="1" />
    <RadioButton
        android:id="@+id/rbtn_red"
        android:layout_
        android:layout_
        android:text="" />
    <View
        android:layout_
        android:layout_
        android:layout_weight="2" />
    <RadioButton
        android:id="@+id/rbtn_green"
        android:layout_
        android:layout_
        android:text="" />
    <View
        android:layout_
        android:layout_
        android:layout_weight="2" />
    <RadioButton
        android:id="@+id/rbtn_blue"
        android:layout_
        android:layout_
        android:text="" />
    <View
        android:layout_
        android:layout_
        android:layout_weight="1" />
</RadioGroup>

【讨论】:

【参考方案2】:

这是工作示例。希望它也对你有用。

用于布局的Activity_main.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical" >

<EditText
    android:id="@+id/et_name"
    android:layout_
    android:layout_
    android:hint="names" />

<LinearLayout
    android:id="@+id/ln_layout"
    android:layout_
    android:layout_
    android:layout_below="@+id/et_name"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/txt1"
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:background="#ff0000"
        android:gravity="center"
        android:text="red" />

    <TextView
        android:id="@+id/txt2"
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:background="#00ff00"
        android:gravity="center"
        android:text="green" />

    <TextView
        android:id="@+id/txt3"
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:background="#0000ff"
        android:gravity="center"
        android:text="blue" />
</LinearLayout>

<RadioGroup
    android:layout_
    android:layout_
    android:layout_below="@+id/ln_layout"
    android:orientation="horizontal"
    android:weightSum="3" >

    <com.example.demoradiobutton.RadioButtonCenter
        android:id="@+id/myview"
        android:layout_
        android:layout_
        android:layout_weight="1" />

    <com.example.demoradiobutton.RadioButtonCenter
        android:id="@+id/myview1"
        android:layout_
        android:layout_
        android:layout_weight="1" />

    <com.example.demoradiobutton.RadioButtonCenter
        android:id="@+id/myview2"
        android:layout_
        android:layout_
        android:layout_weight="1" />
</RadioGroup>

MainActivity.java 文件如下:

package com.example.demoradiobutton;

import android.os.Bundle;
import android.app.Activity;
import android.util.AttributeSet;
import android.view.Menu;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;

public class MainActivity extends Activity 
EditText etName;
RadioButtonCenter rd_btn;
TextView txtBlue,txtGreen,txtRed;
RadioButtonCenter compountBtn;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setVariable();



private void setVariable() 
    etName =(EditText) findViewById(R.id.et_name);
    //rd_btn = (RadioButtonCenter)findViewById(R.id.)
    txtBlue = (TextView) findViewById(R.id.txt1);
    txtGreen =(TextView)findViewById(R.id.txt2);
    txtRed = (TextView) findViewById(R.id.txt3);





@Override
public boolean onCreateOptionsMenu(Menu menu) 
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;



RadioButtonCentee.java 文件如下:

package com.example.demoradiobutton;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.RadioButton;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;

public class RadioButtonCenter extends RadioButton 

@SuppressLint("Recycle")
public RadioButtonCenter(Context context, AttributeSet attrs) 
    super(context, attrs);
    TypedArray a = context.obtainStyledAttributes(attrs,
            R.styleable.CompoundButton, 0, 0);
    buttonDrawable = a.getDrawable(1);
    setButtonDrawable(android.R.color.transparent);


Drawable buttonDrawable;

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

    if (buttonDrawable != null) 
        buttonDrawable.setState(getDrawableState());
        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;
        

        int buttonWidth = buttonDrawable.getIntrinsicWidth();
        int buttonLeft = (getWidth() - buttonWidth) / 2;
        buttonDrawable.setBounds(buttonLeft, y, buttonLeft + buttonWidth, y
                + height);
        buttonDrawable.draw(canvas);
    


并在values文件夹中添加attr.xml文件,文件如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>    
 <declare-styleable name="CompoundButton">
    <attr name="android:button" />
</declare-styleable>
</resources>

【讨论】:

【参考方案3】:
  <RadioGroup
    android:id="@+id/radioGroup1"
    android:layout_
    android:layout_
    android:orientation="horizontal" >

    <TextView
        android:layout_
        android:layout_
        android:layout_weight="1" />

    <RadioButton
        android:id="@+id/radio0"
        android:layout_
        android:layout_
        android:layout_gravity="center"
        android:gravity="center"
        android:text="" />

    <TextView
        android:layout_
        android:layout_
        android:layout_weight="1" />

    <RadioButton
        android:id="@+id/radio1"
        android:layout_
        android:layout_
        android:layout_gravity="center"
        android:checked="true"
        android:gravity="center"
        android:text="" />

    <TextView
        android:layout_
        android:layout_
        android:layout_weight="1" />

    <RadioButton
        android:id="@+id/radio2"
        android:layout_
        android:layout_
        android:layout_gravity="center"
        android:gravity="center"
        android:text="" />

    <TextView
        android:layout_
        android:layout_
        android:layout_weight="1" />
</RadioGroup>

【讨论】:

它适用于显示单选按钮,但在选择单选按钮时,其他应该被取消选择并且它没有发生。当 H 选择了一个按钮时,它可以工作,但在选择其他按钮后仍然保持选中状态。 @karthikeyan karthik: developer.android.com/reference/android/… 我也添加了有问题的屏幕截图。你可以去看看。【参考方案4】:

您的文本大小不等,这就是它们不对齐的原因!尝试通过在文本视图后面添加空格来使文本视图中的文本大小相同!所以最长的单词是绿色的,是五个字母,红色加2个空格,蓝色加1个空格,让它们的长度一样。

否则尝试将它们放在表格布局中!像这样:

<TableLayout 
            android:layout_
            android:layout_
            android:layout_below="@id/tv_titelLogin"
            android:orientation="horizontal">

            <TableRow 
                android:layout_
                android:layout_
                android:orientation="horizontal">

                <TextView 
                    android:layout_
                    android:layout_
                    android:text="Text"
                    android:layout_weight="1"/>
                <TextView 
                    android:layout_
                    android:layout_
                    android:text="Text"
                    android:layout_weight="1"/>
                <TextView 
                    android:layout_
                    android:layout_
                    android:text="Text"
                    android:layout_weight="1"/>

            </TableRow>

            <TableRow 
                android:layout_
                android:layout_
                android:orientation="horizontal">

                <RadioGroup 
                    android:layout_
                    android:layout_
                    android:orientation="horizontal"
                    android:layout_weight="1">

                     <RadioButton 
                        android:layout_
                        android:layout_
                        android:layout_weight="1"
                        android:gravity="center"/>

                    <RadioButton 
                        android:layout_
                        android:layout_
                        android:layout_weight="1"
                        android:gravity="center"/>

                    <RadioButton 
                        android:layout_
                        android:layout_
                        android:layout_weight="1"
                        android:gravity="center"/>
                </RadioGroup>
            </TableRow>


        </TableLayout>

【讨论】:

嘿伙计,我对文本对齐没有任何问题。我在安排单选按钮时遇到问题。 是的,我看到了,愚蠢的我:P。但我试图对齐 RadioButtons,但不知道该怎么做。按钮不响应重力=“中心”,这就是它们应该工作的方式!很抱歉我没有解决方案 没有。没关系雷米艺术。 bdwthanx 尝试。 我想我找到了解决您问题的方法!查看此链接:[链接]***.com/questions/4407553/… 好的。我会检查一下,然后告诉你。【参考方案5】:

这适用于任何地方,适用于每个屏幕尺寸、屏幕密度和两种方向。希望它能解决你的问题:

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_
        android:orientation="vertical" >

        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="horizontal" >

            <TextView
                android:layout_
                android:layout_
                android:layout_weight="1"
                android:background="#ff0000" />

            <TextView
                android:layout_
                android:layout_
                android:layout_weight="1"
                android:background="#00ff00" />

            <TextView
                android:layout_
                android:layout_
                android:layout_weight="1"
                android:background="#0000ff" />
        </LinearLayout>

        <RadioGroup
            android:layout_
            android:layout_
            android:orientation="horizontal" >

            <LinearLayout
                android:layout_
                android:layout_
                android:layout_weight="1"
                android:gravity="center" >

                <RadioButton
                    android:layout_
                    android:layout_ />
            </LinearLayout>

            <LinearLayout
                android:layout_
                android:layout_
                android:layout_weight="1"
                android:gravity="center" >

                <RadioButton
                    android:layout_
                    android:layout_ />
            </LinearLayout>

           <LinearLayout
                android:layout_
                android:layout_
                android:layout_weight="1"
                android:gravity="center" >

                <RadioButton
                    android:layout_
                    android:layout_ />
            </LinearLayout>
        </RadioGroup>

    </LinearLayout>

【讨论】:

不,伙计。它在处理功能时无法正常工作。意味着单击它时可以正常工作,但不会取消选择其他单选按钮。 bdw 感谢您的关注和帮助。 你可能是因为在单选组中使用线性布局..我会检查它并尽快回复你。我们可以轻松地以编程方式处理它..如果你想要那个?意味着取消选中其他单选按钮当一个被点击时。

以上是关于将单选按钮安排在文本下方,并完美地位于所有 android 设备的中心的主要内容,如果未能解决你的问题,请参考以下文章

将单选组分配给单选按钮

将单选按钮关联到各个组

Anylogic:如何将单选按钮链接到 double 类型的变量?

当内容包含在流布局中时,如何将单选按钮或复选框及其标签保持在一起

如何使用 xampp 将单选按钮值提交到数据库

调整页面大小时,单选按钮分成两行