如何强制布局进入整个屏幕

时间:2017-02-01 00:39:56

标签: android xml layout

我正在创建一个Android应用程序,我正在创建图形。但是,我的LinearLayout不占用整个屏幕,切断了一些需要显示的单词。例如,this是显示的内容。我的xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:context="com.example.root.layouts.Main">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="y"
                android:gravity="center_horizontal"
                android:id="@+id/years"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="horizontal">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text=":"
                android:gravity="center_horizontal"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="m"
                android:gravity="center_horizontal"
                android:id="@+id/months"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="horizontal">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text=":"
                android:gravity="center_horizontal"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="w"
                android:gravity="center_horizontal"
                android:id="@+id/weeks"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="horizontal">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text=":"
                android:gravity="center_horizontal"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="d"
                android:gravity="center_horizontal"
                android:id="@+id/days"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="horizontal">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text=":"
                android:gravity="center_horizontal"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="h"
                android:gravity="center_horizontal"
                android:id="@+id/hours"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="horizontal">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text=":"
                android:gravity="center_horizontal"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="m"
                android:gravity="center_horizontal"
                android:id="@+id/minutes"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="horizontal">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text=":"
                android:gravity="center_horizontal"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="s"
                android:gravity="center_horizontal"
                android:id="@+id/seconds"/>
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <!-- I think this is where the problem starts -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Years"
                android:rotation="270"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Months"
                android:rotation="270"/>
        </LinearLayout>


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Weeks"
                android:rotation="270"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Days"
                android:rotation="270"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Hours"
                android:rotation="270"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Minutes"
                android:rotation="270"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Seconds"
                android:rotation="270"/>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

这大部分可能不相关,但我想确保我包含所需的全部内容。任何帮助表示赞赏。提前谢谢。

2 个答案:

答案 0 :(得分:0)

问题在于您拥有的许多嵌套LinearLayouts的高度。根视图的高度应为:android:height="match_parent"以填充屏幕。拥有这么多嵌套的LinearLayouts对性能也有害。看看其他一些ViewGroup类(FrameLayout,RelativeLayout等)应该可以让你更有效地实现你想要的UI。 Android ViewGroup Reference

答案 1 :(得分:0)

#1。您可能不需要所有这些视图。您当然不需要将每段文本都包含在自己的LinearLayout中。到目前为止,你需要的最多是

<LinearLayout
    android:orientation="vertical">

    <LinearLayout
        android:orientation="horizontal">

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

        <!-- more textviews with same layout params -->

    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal">

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

        <!-- more textviews with same layout params -->

    </LinearLayout>

</LinearLayout>

如果您使用GridLayout之类的内容,则可以对此进行更优化。

#2。很多人误解了android:rotation的作用。它只会影响视图的绘制方式;它不会影响视图测量布局的方式。问题是你的TextView被测量和布局,好像文本没有旋转,然后文本被旋转,所以文本被切断了。

我不知道任何简单的解决方案。我唯一的想法是扩展TextView并覆盖onMeasure()来做一些像这样的hacky:

@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
    // swap the measure specs
    super.onMeasure(heightMeasureSpec, widthMeasureSpec);
    // swap the resulting measured dimensions
    setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
}

我不知道这会有多好用;事实上,我几乎可以保证它会有错误(一方面,你的左右填充将被视为顶部和底部填充,反之亦然),但它应该说明这一点。您可以尝试在线查找可以向上和向下绘制文本的TextView的更好实现。