1

ユーザーが連絡先を保存および保存できるアプリを作成しようとしています。保存できますが、リストに問題があります。

データベースを介して実行され、各連絡先 (各行)、画像 (実際にはパスを渡すため文字列)、および文字列の一連のデータを出力する for ループがあります。連絡先ごとに線形レイアウトでスクロールビューに印刷します(各連絡先には独自の線形レイアウトがあるため、1つの連絡先をそれぞれ行に配置できます)。画像は出てきますが、テキストビューはどこにもありません。

log.d(textview.getText()); の使用 テキストビューが作成され、スペースを占有していることを確認します。 http://chesnutcase.heliohost.org/derpbox/itv1.png 名前付きの 2 つの「連絡先」。印刷されていません。間のスペースは、おそらくテキストビューによるものです。 http://chesnutcase.heliohost.org/derpbox/itv2.png 別の 2 つの「連絡先」ですが、名前はありません。お互いの間にスペースを入れないでください。または、少なくとも、かなり小さいスペースです。コード:

DatabaseHandler db = new DatabaseHandler(this);
    int a = (int) (long) db.countRows();
    LinearLayout theLayout = (LinearLayout)findViewById(R.id.contactsList);
    for(int i = 0;i<a;i++){
        ImageButton image = new ImageButton(this);
        int density=getResources().getDisplayMetrics().densityDpi;
        LinearLayout.LayoutParams vp  = new LinearLayout.LayoutParams(density,density, 0.5f);
        image.setLayoutParams(vp);
        image.setScaleType(ImageView.ScaleType.FIT_END);
        int b = a - i;
        try {
            image.setImageBitmap(decodeUri(Uri.parse(db.getContactData("photo_path")[i])));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        theLayout.addView(image);
        TextView tv = new TextView(this);
        tv.setText(db.getContactData("name")[i]);
        Log.d("UserLog","name is "  + db.getContactData("name")[i]);
        Log.d("UserLog","textfield contains " + tv.getText());
        LinearLayout.LayoutParams vp2  = new LinearLayout.LayoutParams(0,0,1f);
        tv.setLayoutParams(vp2);
        tv.setBackgroundColor(Color.RED);
        theLayout.addView(tv);
    }

解決策はありますか?前もって感謝します

4

4 に答える 4

2

LinearLayout連絡先リストに適用した向きを再確認してください。

に悪い設定LayoutParamsをしていますTextViewTextView重み 1 で 0px x 0px を作成しています。

LinearLayout.LayoutParams vp2  = new LinearLayout.LayoutParams(0,0,1f);
tv.setLayoutParams(vp2);

MATCH_PARENTまたはWRAP_CONTENT定数のいずれかを使用してみてください。それらはここにリストされています:http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html#MATCH_PARENT

画面の残りの幅を占めるようにしたい場合はTextView、重みを 1、幅を 0 のままにしますが、高さを のような定数に設定する必要がありますWRAP_CONTENT

また、ImageView画面密度に基づいてスケーリング サイズを設定するのではなく、デバイスの画面密度 (定数) にサイズを設定しています。

于 2013-08-01T15:34:47.110 に答える
1

おそらくrequestLayout();を呼び出す必要があります。現在のビュー レイアウトを更新するため。

theLayout.requestLayout();

また、そのレイアウト パラメータで幅 0、高さ 0 のビューを作成しているようです。

LinearLayout.LayoutParams vp2  = new LinearLayout.LayoutParams(0,0,1f);
于 2013-08-01T15:30:41.587 に答える