我需要设计一个包含在我的活动屏幕中的特殊数字键盘(不是常规键盘)。普通键盘不符合我的需求。
我用ConstraintLayout
设计了它。
它运作良好,但由于固定了按钮大小,因此在较小的设备上键盘无法很好地适合屏幕。
我已经重新设计了键盘。
我没有为按钮设置尺寸,长宽比为1:1,并且为每列按钮制作了一个垂直链。
布局的高度为match_parent
和width_wrap
。
因此,预期的行为是填充所有可用垂直空间的键盘。
在布局编辑器上看起来不错(适应高度),但是当我运行该应用程序后,它就崩溃了,Binary XML file line #9: Binary XML file line #31: You must supply a layout_width attribute."
我确实提供了宽度wrap_content
,我所有的按钮都有min_width
和min_height
。
答案 0 :(得分:0)
由于所有尝试都因使用ConstraintLayout而失败,因此我尝试了TableLayout。
它工作得更好,但是我有一些对齐问题: 在我使用layout_span的行上,表格单元格没有预期的大小。差别很小,但确实存在。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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="match_parent"
tools:layout_editor_absoluteY="25dp">
<TextView
android:id="@+id/keyboard_text_label"
style="@style/block_label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textAllCaps="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TableLayout
android:id="@+id/keyboard"
android:layout_width="match_parent"
android:layout_height="0dp"
android:stretchColumns="*"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/keyboard_text_label">
<TableRow
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<TextView
android:id="@+id/keyboard_text_value"
style="@style/keyboard_btn"
android:layout_gravity="fill"
android:layout_span="2"
android:layout_weight="4"
android:gravity="center|right"
android:paddingRight="20dp"
android:textSize="30sp"
/>
<Button
android:id="@+id/kb_bdel"
style="@style/keyboard_btn"
android:layout_span="1"
android:layout_weight="2"
android:text="X" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<Button
android:id="@+id/kb_b1"
style="@style/keyboard_btn"
android:layout_weight="2"
android:text="1" />
<Button
android:id="@+id/kb_b2"
style="@style/keyboard_btn"
android:layout_weight="2"
android:text="2" />
<Button
android:id="@+id/kb_b3"
style="@style/keyboard_btn"
android:layout_weight="2"
android:text="3" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<Button
android:id="@+id/kb_b4"
style="@style/keyboard_btn"
android:layout_weight="2"
android:text="4" />
<Button
android:id="@+id/kb_b5"
style="@style/keyboard_btn"
android:layout_weight="2"
android:text="5" />
<Button
android:id="@+id/kb_b6"
style="@style/keyboard_btn"
android:layout_weight="2"
android:text="6" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<!-- LINE 3 -->
<Button
android:id="@+id/kb_b7"
style="@style/keyboard_btn"
android:layout_weight="2"
android:text="7" />
<Button
android:id="@+id/kb_b8"
style="@style/keyboard_btn"
android:layout_weight="2"
android:text="8" />
<Button
android:id="@+id/kb_b9"
style="@style/keyboard_btn"
android:layout_weight="2"
android:text="9" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<Button
android:id="@+id/kb_bgo"
style="@style/keyboard_btn"
android:layout_span="2"
android:layout_weight="4"
android:text="GO" />
<Button
android:id="@+id/kb_bm3"
style="@style/keyboard_btn"
android:layout_weight="2"
android:text="0" />
</TableRow>
</TableLayout>
</android.support.constraint.ConstraintLayout>
和我的风格:
<style name="keyboard_btn" parent="@android:style/Widget.Button">
<item name="android:textSize">16sp</item>
<item name="android:textStyle">bold</item>
<item name="android:gravity">center</item>
<item name="android:layout_margin">3dp</item>
<item name="android:padding">5dp</item>
<item name="android:layout_gravity">fill</item>
<item name="android:layout_height">match_parent</item>
<item name="android:layout_width">0dp</item>
<item name="android:minHeight">@dimen/keyboard_btn_minheight</item>
<item name="android:minWidth">@dimen/keyboard_btn_minwidth</item>
<item name="android:textColor">@color/action_btn_color</item>
<item name="android:background">@drawable/keyboard_btn</item>
</style>