GridLayout在小型显示器上折叠

我有LinearLayoutTextViewGridLayout和另一个TextView 。 它在许多现代手机和平板电脑上正确显示,但它像Nexus S小显示器完全失败。请参阅下面的图片。

在这里输入图像说明 在这里输入图像说明

我试图减小字体大小,删除9补丁的背景,甚至删除所有的利润。 当有一些利润时,我可以看到数字7。 然后,我最小化了他们,我可以看到他们的第一个button,显示两倍大的四行。 我不明白为什么,它应该有wrap_content宽度。

我试图尽量减less代码,并减less到单行GridLayout ,它仍然不适合屏幕的宽度。

那里发生了什么?

更新:

  • 420×800 mdpi的作品
  • 420×800 hdpi坏了
  • 540×920 hdpi的作品
  • 720×1280 hdpi的作品

更新2:

当字体是38sp或更大时,Nexus 5x有相同的问题。 有趣的是,Studio的devise器显示正确的布局,但设备/模拟器显示错误的视图和以下错误:

 D/android.support.v7.widget.GridLayout: vertical constraints: y1-y0>=197, y2-y1>=197, y3-y2>=197, y4-y3>=197, y4-y0<=785 are inconsistent; permanently removing: y4-y0<=785. 

calc.xml:

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!--Display row--> <TextView android:id="@+id/assignment" android:text="50 + 40 = 90" style="@style/Formula" android:focusable="false" android:layout_width="match_parent" android:layout_height="80dp" tools:ignore="HardcodedText" /> <android.support.v7.widget.GridLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" app:columnCount="4" app:rowCount="4"> <!-- row with 7-9,+ --> <Button android:id="@+id/digit7" android:text="7" style="@style/KeypadLeftButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/digit8" android:text="8" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/digit9" android:text="9" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/buttonPlus" android:text="+" style="@style/KeypadRightButton" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_rowWeight="0.5" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <!--row with 4-6, - --> <Button android:id="@+id/digit4" android:text="4" style="@style/KeypadLeftButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/digit5" android:text="5" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/digit6" android:text="6" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/buttonMinus" android:text="-" style="@style/KeypadRightButton" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_rowWeight="0.5" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <!--row with 1-3, * --> <Button android:id="@+id/digit1" android:text="1" style="@style/KeypadLeftButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/digit2" android:text="2" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/digit3" android:text="3" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/buttonMultiply" android:text="\u22C5" style="@style/KeypadRightButton" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_rowWeight="0.5" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <!--row with 0, backspace and / --> <Button android:id="@+id/digit0" android:text="0" style="@style/KeypadLeftButton" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_columnWeight="1" app:layout_gravity="fill_horizontal" app:layout_rowWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/buttonBackspace" android:text="←" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_gravity="fill_vertical" app:layout_columnSpan="2" app:layout_rowWeight="0.5" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/buttonDivide" android:text=":" style="@style/KeypadRightButton" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_rowWeight="0.5" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> </android.support.v7.widget.GridLayout> <!--row with button submit --> <Button android:id="@+id/buttonSubmit" android:text="@string/action_next_formula" style="@style/KeypadNextButton" android:layout_width="match_parent" android:layout_height="80dp" app:layout_gravity="fill_horizontal"/> </LinearLayout> 

款式:

 <style name="Formula"> <item name="android:textSize">@dimen/calc_button_text</item> <item name="android:textColor">@color/gray_35</item> <item name="android:gravity">center</item> <item name="android:background">@drawable/lcd</item> <item name="android:layout_marginTop">@dimen/calc_big_margin</item> <item name="android:layout_marginBottom">@dimen/calc_superbig_margin</item> <item name="android:layout_marginLeft">@dimen/calc_big_margin</item> <item name="android:layout_marginRight">@dimen/calc_big_margin</item> </style> <style name="KeypadButton" parent="@style/Widget.AppCompat.Button"> <item name="android:textSize">@dimen/calc_button_text</item> <item name="android:textColor">@color/white</item> <!--<item name="android:background">@drawable/tl_2</item>--> <item name="android:layout_marginLeft">@dimen/calc_small_margin</item> <item name="android:layout_marginBottom">@dimen/calc_small_margin</item> </style> <style name="KeypadLeftButton" parent="@style/KeypadButton"> <item name="android:layout_marginLeft">@dimen/calc_big_margin</item> </style> <style name="KeypadRightButton" parent="@style/KeypadButton"> <item name="android:layout_marginRight">@dimen/calc_big_margin</item> </style> <style name="KeypadNextButton" parent="@style/Widget.AppCompat.Button.Colored"> <item name="android:background">@drawable/tl_next</item> <item name="android:textSize">@dimen/calc_button_text</item> <item name="android:layout_marginTop">@dimen/calc_big_margin</item> <item name="android:layout_marginBottom">@dimen/calc_big_margin</item> <item name="android:layout_marginLeft">@dimen/calc_big_margin</item> <item name="android:layout_marginRight">@dimen/calc_big_margin</item> </style> 

梦诗:

 <dimen name="calc_button_text">14sp</dimen> <dimen name="calc_superbig_margin">2dp</dimen> <dimen name="calc_big_margin">1dp</dimen> <dimen name="calc_small_margin">0dp</dimen> 

更新16日二月

Manjunath Prabhakar说麻烦可能与体重有关。 所以我试图删除所有的重量属性,现在布局更有意义。 我还没有解决这个问题。 我会考虑重写嵌套LinearLayouts的布局作为退后一步,因此我让其他build议打开赏金。

在这里输入图像说明

我想这是一个支持版本的GridLayout的错误。

看看这个 (这是目前分配 ):我认为这是关于您的问题关于Nexus 5X字体大小的行为。 一般来说,我在这里发现了很多相关的错误(与GridLayout宽度测量有关)。

我会尽力给你一个解决方法。

我正在使用com.android.support:gridlayout-v7:25.1.1

我认为你可以通过这种方式解决你的布局问题(旧手机alignment和Nexus 5X的字体大小):

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!--Display row--> <TextView android:id="@+id/assignment" android:text="50 + 40 = 90" style="@style/Formula" android:focusable="false" android:layout_width="match_parent" android:layout_height="80dp" tools:ignore="HardcodedText" /> <android.support.v7.widget.GridLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" app:columnCount="4" app:rowCount="4"> <!-- row with 7-9,+ --> <LinearLayout app:layout_gravity="fill_horizontal" app:layout_columnSpan="4" android:orientation="horizontal" app:layout_rowWeight="1"> <Button android:id="@+id/digit7" android:text="7" style="@style/KeypadLeftButton" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/digit8" android:text="8" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/digit9" android:text="9" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/buttonPlus" android:text="+" style="@style/KeypadRightButton" android:layout_width="wrap_content" android:layout_height="match_parent" app:layout_rowWeight="0.5" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> </LinearLayout> <!--row with 4-6, - --> <LinearLayout app:layout_gravity="fill_horizontal" app:layout_columnSpan="4" android:orientation="horizontal" app:layout_rowWeight="1"> <Button android:id="@+id/digit4" android:text="4" style="@style/KeypadLeftButton" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/digit5" android:text="5" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/digit6" android:text="6" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/buttonMinus" android:text="-" style="@style/KeypadRightButton" android:layout_width="wrap_content" android:layout_height="match_parent" app:layout_rowWeight="0.5" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> </LinearLayout> <!--row with 1-3, * --> <LinearLayout app:layout_gravity="fill_horizontal" app:layout_columnSpan="4" android:orientation="horizontal" app:layout_rowWeight="1"> <Button android:id="@+id/digit1" android:text="1" style="@style/KeypadLeftButton" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/digit2" android:text="2" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/digit3" android:text="3" style="@style/KeypadButton" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" app:layout_rowWeight="1" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> <Button android:id="@+id/buttonMultiply" android:text="\u22C5" style="@style/KeypadRightButton" android:layout_width="wrap_content" android:layout_height="match_parent" app:layout_rowWeight="0.5" app:layout_columnWeight="1" tools:ignore="HardcodedText" /> </LinearLayout> <!--row with 0, backspace and / --> <LinearLayout app:layout_gravity="fill_horizontal" app:layout_columnSpan="4" android:orientation="horizontal" app:layout_rowWeight="1" android:weightSum="4"> <Button android:id="@+id/digit0" android:text="0" style="@style/KeypadLeftButton" android:layout_width="0dp" android:layout_height="match_parent" app:layout_columnWeight="1" app:layout_gravity="fill_horizontal" app:layout_rowWeight="1" tools:ignore="HardcodedText" android:layout_weight="1"/> <Button android:id="@+id/buttonBackspace" android:text="←" style="@style/KeypadButton" android:layout_width="0dp" android:layout_height="match_parent" app:layout_gravity="fill_vertical" app:layout_columnSpan="2" app:layout_rowWeight="0.5" app:layout_columnWeight="1" tools:ignore="HardcodedText" android:layout_weight="2"/> <Button android:id="@+id/buttonDivide" android:text=":" style="@style/KeypadRightButton" android:layout_width="0dp" android:layout_height="match_parent" app:layout_rowWeight="0.5" app:layout_columnWeight="1" tools:ignore="HardcodedText" android:layout_weight="1"/> </LinearLayout> </android.support.v7.widget.GridLayout> <!--row with button submit --> <Button android:id="@+id/buttonSubmit" android:text="NEXT" style="@style/KeypadNextButton" android:layout_width="match_parent" android:layout_height="80dp" app:layout_gravity="fill_horizontal"/> </LinearLayout> 

基本上,我做的是将每个button组(除了最后一行之外的四个button)包装在LinearLayout

在这里你可以看到两个手机的外观:

Nexus 5 Nexus 5截图

三星galaxy core加(老) Galaxy核心加截图

正如你所看到的那样,最后一行的排列有问题。 我想你可以尝试解决这些button的属性和属性四处游荡。 让我知道,如果你想在这个最后的话题进一步改善。

希望这可以帮助。

使用GridLayout时有一些限制和限制。 这是链接到文档

“GridLayout并不支持按权重定义的权重原则,因此一般来说,不可能将GridLayoutconfiguration为在多行或多列之间以非平凡比例分配多余的空间。为了完全控制行或列中多余的空间分布;使用LinearLayout子视图来保存相关单元组中的组件。

如果我是你,我会使用线性布局或表格布局。

希望这可以帮助!