根据文字宽度

时间:2018-06-11 08:36:38

标签: android android-layout

我需要垂直或水平显示按钮列表,并根据文本在视图中的显示方式做出决定。 我需要显示如下按钮: Pic image

但是如果文本的宽度较长并且需要将其移动到新行,我需要更改方向并垂直设置它们,如下所示:

enter image description here

项目数量可以不同,从2到最多10.我如何知道文本是否适合水平对齐的视图,以便如果它们不适合我可以使它们垂直对齐?

3 个答案:

答案 0 :(得分:0)

如果父布局有超过4(或)5个视图,字符串值肯定会分成新行,所以如果你想要建议如果有帮助就使用它

将父布局设为线性布局,默认方向为XML格式水平

在JAVA代码中检查String raspuns = "dynamic string";长度

试试这个

LinearLayout parent_layout = findViewById(R.id.parent);
if(raspuns.length > 7){
   parent_layout.setOrientation(LinearLayout.VERTICAL);
}

希望它有助于

答案 1 :(得分:0)

您需要使用的是android.support.v7.widget.ButtonBarLayout

  

LinearLayout的扩展,自动切换到垂直   当水平无法适合其子视图时的方向。

Android本身在abc_alert_dialog_button_bar_material.xml

中使用了哪个

所以代码看起来像

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.ButtonBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="bottom"
    android:layoutDirection="locale"
    android:orientation="horizontal"
    android:paddingBottom="4dp"
    android:paddingLeft="12dp"
    android:paddingRight="12dp"
    android:paddingTop="4dp">

    <Button
        android:id="@android:id/button3"
        style="?attr/buttonBarNeutralButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Neutral button" />

    <android.widget.Space
        android:id="@+id/spacer"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:visibility="invisible" />

    <Button
        android:id="@android:id/button2"
        style="?attr/buttonBarNegativeButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Negative button" />

    <Button
        android:id="@android:id/button1"
        style="?attr/buttonBarPositiveButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Positive button" />
</android.support.v7.widget.ButtonBarLayout>

此xml的输出是

Stacked button active

如果按钮的文字很小,则相同布局的输出为 enter image description here

答案 2 :(得分:0)

试试这样,它对我来说很好用

<强>布局

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".MainActivity">

<LinearLayout
    android:id="@+id/linear"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="8dp">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:background="@color/colorAccent"
        android:padding="16dp"
        android:text="Hello World!"
        android:textColor="#000000"
        android:textSize="16sp"
        android:textStyle="bold" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:background="@color/colorAccent"
        android:padding="16dp"
        android:text="Hello World!"
        android:textColor="#000000"
        android:textSize="16sp"
        android:textStyle="bold" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:background="@color/colorAccent"
        android:padding="16dp"
        android:text="Hello World!"
        android:textColor="#000000"
        android:textSize="16sp"
        android:textStyle="bold" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:background="@color/colorAccent"
        android:padding="16dp"
        android:text="Hello World!"
        android:textColor="#000000"
        android:textSize="16sp"
        android:textStyle="bold" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:background="@color/colorAccent"
        android:padding="16dp"
        android:text="Hello World!"
        android:textColor="#000000"
        android:textSize="16sp"
        android:textStyle="bold" />
</LinearLayout>

</HorizontalScrollView>

重新排列视图的代码

    val displayMetrics = DisplayMetrics()
    windowManager.defaultDisplay.getMetrics(displayMetrics)
    val width = displayMetrics.widthPixels
    var viewsWidth = 0;
    for (i in 0..linear.childCount - 1) {
        linear.getChildAt(i).post({
            viewsWidth += linear.getChildAt(i).width
            if (i == linear.childCount - 1) {
                if (width < viewsWidth) {
                    linear.orientation = LinearLayout.VERTICAL
                    for (k in 0..linear.childCount - 1) {
                        (linear.getChildAt(k) as Button).width = (width - resources.getDimension(R.dimen.spacing_large)).toInt()
                        linear.getChildAt(k).requestLayout()
                    }
                }
            }
        });
    }

spacing_largemargin_startmargin_end

的总和