如何使用 11 个按钮获取计时器的输入

How to take input for timer with 11 buttons

提问人:codec123 提问时间:9/20/2023 最后编辑:C.F.Gcodec123 更新时间:9/22/2023 访问量:49

问:

我是android开发的新手。我正在尝试制作一个计时器应用程序。我的 UI 有 11 个 0-9 按钮、一个 00 按钮和一个退格按钮。我的文本视图的初始格式将类似于“00h 00m 00s”。当用户键入输入(如“123”)时,文本视图应从右向左更改,例如“00h 01m 23s”。我不知道该怎么做。 它应该像谷歌时钟应用程序一样接受输入 GOOGLE 时钟应用

GOOGLE CLOCK APP

请用JAVA编写清晰的代码。

我尝试对 h 、m 和 s 使用三个 textview。我使用 SpannableStringBuilder 来减小 h 、m 和 s 的大小。 我原以为它会替换文本视图中的零,但它正在删除它并写入新数字。简而言之,我搞砸了。

Java 输入 android-view 倒数计时器

评论

0赞 Community 9/21/2023
请澄清您的具体问题或提供其他详细信息,以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。

答:

0赞 C.F.G 9/20/2023 #1

第一种方法:

尝试使用 Strings 功能(我还没有测试过):

String formattedSecond = second + Html.fromHtml("<sub><small>" + s + "</small></sub>")

secondTextView.setText(formattedSecond);

第二种方法:

您可以在右(端)底部添加一个额外的对齐方式,每个较小的尺寸都在 .TextViewTextViewRelativeLayout

<RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/aa"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="12"
            android:gravity="center"
            android:textSize="50sp"/>

        <TextView
            android:id="@+id/bb"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:text="S"
            android:gravity="center"
            android:textSize="20sp"
            android:layout_alignBottom="@id/aa"
            android:layout_alignEnd="@id/aa" />

</RelativeLayout>

评论

0赞 codec123 9/21/2023
我的问题是用户输入的数字应该替换零,然后从右向左移动。它最初只显示 00,然后消失
0赞 Reilas 9/22/2023 #2

'...当用户键入输入(如“123”)时,文本视图应从右向左更改,例如“00h 01m 23s”。我不知道该怎么做。它应该像谷歌时钟应用程序谷歌时钟应用程序一样输入......”

利用类结构将值解析为小时分钟

import static java.lang.Integer.parseInt;
class Time {
    String string = "";
    int h, m, s;

    Time() { }
    Time(String s) { append(s); }

    void append(String s) {
        string += s;
        parse();
    }

    private void parse() {
        int n = string.length();
        if (n < 3) s = parseInt(string);
        else {
            if (n <= 4) m = parseInt(string.substring(0, n - 2));
            else {
                h = parseInt(string.substring(0, n - 4));
                m = parseInt(string.substring(n - 4, n - 2));
            }
            s = parseInt(string.substring(n - 2));
        }
    }

    @Override
    public String toString() {
        return "%02dh %02dm %02ds".formatted(h, m, s);
    }
}
String s = "12345";
System.out.println(new Time(s));

输出

01h 23m 45s

下面是追加值的示例。

Time t = new Time();
for (int i = 1; i < 10; i++) {
    t.append(String.valueOf(i));
    System.out.println(t);
}

输出

00h 00m 01s
00h 00m 12s
00h 01m 23s
00h 12m 34s
01h 23m 45s
12h 34m 56s
123h 45m 67s
1234h 56m 78s
12345h 67m 89s

评论

1赞 codec123 9/23/2023
非常感谢你帮助一个菜鸟。必须尝试一下。