【问题标题】:LinearLayout not responsive in small devicesLinearLayout 在小型设备中没有响应
【发布时间】:2020-11-16 14:05:26
【问题描述】:

我的 Android 应用程序中有一个布局文件:

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/player_background"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context=".Fragments.PlayerFragment">

    <ProgressBar
        android:id="@+id/progress_bar_player"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="5dp"
        android:theme="@style/ProgressBarStyle"
        android:visibility="invisible" />

    <TextView
        android:id="@+id/title_label"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="center"
        android:text="Title"
        android:textColor="@color/white"
        android:textSize="24dp" />

    <ImageView
        android:id="@+id/view_imageview"
        android:layout_width="280dp"
        android:layout_height="280dp"
        android:layout_marginTop="10dp"
        android:background="@color/white" />

    <TextView
        android:id="@+id/status_label"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="center"
        android:text="Status"
        android:textColor="@color/white"
        android:textSize="20dp" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">

        <ImageButton
            android:id="@+id/play_pause_btn"
            android:layout_width="70dp"

            android:layout_height="70dp"
            android:layout_centerHorizontal="true"
            android:background="@drawable/round_button"
            android:gravity="center_vertical|center_horizontal"
            android:padding="20dp"
            android:scaleType="fitCenter"
            android:src="@drawable/play_btn" />

        <ImageButton
            android:id="@+id/sleep_timer_btn"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_marginLeft="30dp"
            android:layout_toRightOf="@+id/play_pause_btn"
            android:background="@drawable/round_button"
            android:gravity="center_vertical|center_horizontal"
            android:padding="20dp"
            android:scaleType="fitCenter"
            android:src="@drawable/sleep_btn" />

        <ImageButton
            android:id="@+id/share_btn"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_marginRight="30dp"
            android:layout_toLeftOf="@+id/play_pause_btn"
            android:background="@drawable/round_button"
            android:gravity="center_vertical|center_horizontal"
            android:padding="20dp"
            android:scaleType="fitCenter"
            android:src="@drawable/share_btn" />

        <TextView
            android:id="@+id/sleep_timer_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/sleep_timer_btn"
            android:layout_alignLeft="@+id/sleep_timer_btn"
            android:layout_alignRight="@+id/sleep_timer_btn"
            android:layout_marginTop="5dp"
            android:gravity="center"
            android:text="Status"
            android:textColor="@color/white"
            android:textSize="15dp" />

    </RelativeLayout>

    <SeekBar
        android:id="@+id/volume_seek_bar"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:theme="@style/Volume_Seekbar"
        android:paddingStart="30dp"
        android:paddingEnd="30dp"/>

</LinearLayout>

它在大多数设备中都能完美运行,但在小屏幕设备中我看不到SeekBar,因为它不在屏幕上。知道如何解决吗?

【问题讨论】:

  • 使用约束布局怎么样?
  • @YosiFZ 您可以在父布局上添加滚动视图,它会向您显示完整的布局,但显然带有滚动。
  • 问题在于使用固定尺寸,因此,您应该尽量减少固定尺寸,因为手机尺寸会有所不同。看看this answer,会有帮助的。

标签: java android android-studio android-layout kotlin


【解决方案1】:

您在视图中使用了非常大的固定尺寸,并且因为不同的手机具有不同的屏幕尺寸在某些设备上似乎可以正常工作的内容实际上在其他设备上却无法正常工作

例如 - 在高度为 300dp 的较小设备中,总观看次数为 400dp,由于屏幕尺寸较小,您将没有足够的空间容纳某些视图,这就是为什么你没有看到你的观点。


您可以使用ConstraintLayout 使您的屏幕响应,或者如果您想保持当前的布局结构,您可以使用以下库来缩放 dp 的大小:

sspsdp 为您的视图和文本获取可缩放的大小单位。


另一种选择是用ScrollView 包裹您的布局,让您的屏幕可以滚动,这样您就可以“看到”屏幕上的所有视图 - 请注意,这可能不直观您的用户。

【讨论】:

    【解决方案2】:

    我建议您使用constraint layout,但如果您仍想继续使用当前的view,那么最好将scrollview 添加到您的父布局中,这样您的布局就不会了t 在较小的设备上裁剪:

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/player_background"
            android:gravity="center_horizontal"
            android:orientation="vertical"
            tools:context=".Fragments.PlayerFragment">
    
            <ProgressBar
                android:id="@+id/progress_bar_player"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="5dp"
                android:theme="@style/ProgressBarStyle"
                android:visibility="invisible" />
    
            <TextView
                android:id="@+id/title_label"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:gravity="center"
                android:text="Title"
                android:textColor="@color/white"
                android:textSize="24dp" />
    
            <ImageView
                android:id="@+id/view_imageview"
                android:layout_width="280dp"
                android:layout_height="280dp"
                android:layout_marginTop="10dp"
                android:background="@color/white" />
    
            <TextView
                android:id="@+id/status_label"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:gravity="center"
                android:text="Status"
                android:textColor="@color/white"
                android:textSize="20dp" />
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp">
    
                <ImageButton
                    android:id="@+id/play_pause_btn"
                    android:layout_width="70dp"
    
                    android:layout_height="70dp"
                    android:layout_centerHorizontal="true"
                    android:background="@drawable/round_button"
                    android:gravity="center_vertical|center_horizontal"
                    android:padding="20dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/play_btn" />
    
                <ImageButton
                    android:id="@+id/sleep_timer_btn"
                    android:layout_width="70dp"
                    android:layout_height="70dp"
                    android:layout_marginLeft="30dp"
                    android:layout_toRightOf="@+id/play_pause_btn"
                    android:background="@drawable/round_button"
                    android:gravity="center_vertical|center_horizontal"
                    android:padding="20dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/sleep_btn" />
    
                <ImageButton
                    android:id="@+id/share_btn"
                    android:layout_width="70dp"
                    android:layout_height="70dp"
                    android:layout_marginRight="30dp"
                    android:layout_toLeftOf="@+id/play_pause_btn"
                    android:background="@drawable/round_button"
                    android:gravity="center_vertical|center_horizontal"
                    android:padding="20dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/share_btn" />
    
                <TextView
                    android:id="@+id/sleep_timer_label"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/sleep_timer_btn"
                    android:layout_alignLeft="@+id/sleep_timer_btn"
                    android:layout_alignRight="@+id/sleep_timer_btn"
                    android:layout_marginTop="5dp"
                    android:gravity="center"
                    android:text="Status"
                    android:textColor="@color/white"
                    android:textSize="15dp" />
    
            </RelativeLayout>
    
            <SeekBar
                android:id="@+id/volume_seek_bar"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:paddingStart="30dp"
                android:paddingEnd="30dp"
                android:theme="@style/Volume_Seekbar" />
    
        </LinearLayout>
    </ScrollView>
    

    【讨论】:

      【解决方案3】:

      这是因为您用于构建布局的固定尺寸最终被总结为对于小屏幕尺寸来说太大了。您可以尝试以下方法来解决此问题:

      1. 使用最小宽度创建专门针对小屏幕尺寸的布局qualifier
      2. 使您的布局可滚动
      3. 使用约束布局
      4. 使用sspsdp 大小单位

      注意,您必须为当前布局指定最小宽度限定符,以使最小宽度限定符不包括小屏幕设备并包括适合您的布局的设备。

      【讨论】:

        猜你喜欢
        • 2018-10-24
        • 2020-05-12
        • 1970-01-01
        • 2018-09-17
        • 2017-10-22
        • 2020-06-30
        • 1970-01-01
        • 2016-03-26
        • 2015-02-19
        相关资源
        最近更新 更多