Android ConstraintLayout:设计适合高度/宽度的自定义键盘

时间:2018-07-19 20:23:20

标签: android android-constraintlayout

我需要设计一个包含在我的活动屏幕中的特殊数字键盘(不是常规键盘)。普通键盘不符合我的需求。

我用ConstraintLayout设计了它。 它运作良好,但由于固定了按钮大小,因此在较小的设备上键盘无法很好地适合屏幕。

我已经重新设计了键盘。 我没有为按钮设置尺寸,长宽比为1:1,并且为每列按钮制作了一个垂直链。 布局的高度为match_parentwidth_wrap

因此,预期的行为是填充所有可用垂直空间的键盘。

在布局编辑器上看起来不错(适应高度),但是当我运行该应用程序后,它就崩溃了,Binary XML file line #9: Binary XML file line #31: You must supply a layout_width attribute."

我确实提供了宽度wrap_content,我所有的按钮都有min_widthmin_height

1 个答案:

答案 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>

Global View of Keyboard. Fits well in width and height

The X buttons doesn't have same width as button "3" although they have same weight

Same problem with "0" button which is not same size as "9" button