3

アプリケーションにアプリ詳細画面を作成したいのですが、想像できるこの最良のデザイン パターンは、スクリーンショットに示されている Android のデフォルトのアプリ詳細画面です。ここに画像の説明を入力

ここでの問題は、これらのキーと値のペアの間の部分を作成する方法がわからないことです"................"。その点線のセクションは、両側のテキストのサイズに応じて拡大または縮小するために柔軟にキャプチャする必要があります

例えば

シナリオ 1:

Total..........2MB (10 ドット + テキスト)

シナリオ 2:

Total........200KB (8 ドット + テキスト)

そのため、ドットはテキストサイズに従って調整されます。

key-valueアプリの詳細シナリオでペアを表示するためのより良い方法(パターン)を知っている場合は、それを達成する方法を誰かに提案してもらえますか。大歓迎です。

4

3 に答える 3

2

それは非常に単純です(ダミーレイアウト):

<RelativeLayout>
    <TextView parentLeft="true"/>
    <TextView parentRight="true"/>
    <Textview background="@drawable/one_dot_repeat"
        toRightOf="@id/firstTextView"
        toLeftOf="@id/secondTextView"
        layout_width="match_parent"> <!-- or any other view -->
</RelativeLayout>

編集: 9patch は完璧ではないかもしれませんが、1 つのドットで画像を追加し、repeat="true" を設定するだけの xml を作成できます。

2 番目の編集: より適切な解決策は、背景として図形を追加することです。形状はそのようなものである可能性があります(テストされていません):

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line" >
    <size
        android:width="500"
        android:height="1" />
    <solid
        android:color="@color/black" />
    <stroke
        android:width="1"
        android:color="@color/white"
        android:dashWidth="1"
        android:dashGap="1" />
</shape>

値を少し調整する必要があると思いますが、うまくいくはずです。

于 2013-01-22T15:45:04.113 に答える
2

救助へのjava.util.Formatter :

フォーマッタは、印刷するテキストを左揃えにし、幅を割り当てることができるため、テキストをスペースで埋めて、必要な幅をすべて占有し、スペースをドットに置き換えるだけです。次に例を示します。

import java.util.*;

public class Test
{
        public static final synchronized strictfp void main(String[] args)
        {
                Map<String, Double> myData = new LinkedHashMap<String, Double>();
                myData.put("Total", 24.0);
                myData.put("App", 24.0);
                myData.put("USB storage app", 0.0);
                myData.put("Data", 0.0);
                myData.put("SD card", 0.0);


                for(Map.Entry myEntry : myData.entrySet())
                {
                        Formatter myFormatter = new Formatter();
                        myFormatter.format("%1$-20s%2$15.2fKB", myEntry.getKey(), myEntry.getValue());
                        System.out.println(myFormatter.toString().replace(' ', '.'));
                }
        }
}

ここで興味深いのは、フォーマット文字列です。

%1$-20s

最初の引数 (1$) を左詰め (-) で最大幅 20 文字 (20) の文字列 (s) として出力します。

%2$15.2fKB\n

2 番目の引数 (2$) を最大幅 15 文字 (15) で小数点以下 2 桁 (.2) を float (f) として出力します。

つまり、最初の値は常に 20 文字に固定され、2 番目の値は常に 15 文字に固定されます。その場合、すべての行は常に 35 文字の長さ + KB サフィックス + 浮動小数点数の小数点になります。

上記のコードは、次の出力を生成します。

Total.........................24.00KB
App...........................24.00KB
USB.storage.app................0.00KB
Data...........................0.00KB
SD.card........................0.00KB

TODO: 最初の列の名前に正当なスペースを上書きしないでください ;)

于 2013-01-22T16:31:21.053 に答える
0

確かではありませんが、次のようにこれを達成することもできると思いました。

画面に印刷/表示する文字列の全長を定義します。

これを 20 と定義するとします。これで 2 つのケースができました。例を挙げて説明しましょう。

Str1 = 合計

Str2 = 200KB

次のような別の文字列を追加できるようになりました

Str3 ="";

for(i=0;i<(20-str1.length()-str2.length))

str3 +=".";

現在、「Total」、「200KB/20KB」、「dots/...」の 3 つの文字列があり、単一の TextV または複数の TextView を使用してそれらを印刷できます。

その20の代わりに全長を計算することもできます.私が言ったように、私は確信が持てないので、否定的な投票はしないでください:P

于 2013-01-22T15:55:27.820 に答える