リストダイアログの表示行数を動的に変更する方法

1,730 views
Skip to first unread message

たろサ

unread,
Jan 17, 2011, 12:17:05 PM1/17/11
to android-g...@googlegroups.com
 たろサです。
 すいません、レイアウトの設計がわかっていないので、教えてください。

 現在、添付画像のように、リストダイアログが3行表示されます。ソースは下
記です。
--
AlertDialog dialog = new AlertDialog.Builder(getContext())
.setTitle( moji )
.setItems(items, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
whitchBtn = which + 1;
}
}).show();
--

 この表示行数を動的に4行とか5行とか変更したいのです。下記のようにレイア
ウトを作って、setView()すればいいと思うのですが、レイアウトのやり方が勉
強不足でわかりません。
 下の例のように文字を小さくしても、1行表示されるようになっただけで、全
然だめでした。

 行数を増やすためには、どのようなレイアウト設定をすればいいのでしょう
か。ダイアログの動的レイアウトの参考サイトなど、ありましたら、教えてくだ
さい。

 よろしくお願いします。
--
// テキストビューを生成
TextView text = new TextView(getContext());
text.setTextSize(10.0f);
//レイアウトの生成
LinearLayout layout = new LinearLayout(getContext());
layout.addView(text);
//ダイアログ
AlertDialog dialog = new AlertDialog.Builder(getContext())
.setView(layout)
.setTitle( moji )
.setItems(items, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
whitchBtn = which + 1;
}
}).show();
--


--
山本三七男 (Minao Yamamoto) ---------------- ハンドル:たろサ -----
E-Mail: taro...@gmail.com

device.png

yokmama

unread,
Jan 17, 2011, 7:20:25 PM1/17/11
to android-g...@googlegroups.com
夜子ままです

ちょっと意味が汲み取れないのですが
TextViewの行数を3行にしたい ということですか?

それならsetLinesというメソッドがあります。

例)
TextView textview = (TextView)findViewById(R.id.TextView01);
textview.setText("abc");
textview.setLines(3);


2011年1月18日2:17 たろサ <taro...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。




--
*************************************************
Re:Kayo-System Co.,Ltd. 

CEO    Masafumi Terazono
Twitter @yokmama
*************************************************


たろサ

unread,
Jan 17, 2011, 10:26:10 PM1/17/11
to android-g...@googlegroups.com
 夜子まま様、

 たろサです。説明ありがとうございます。

> ちょっと意味が汲み取れないのですが

 説明が下手ですいません。
 添付したsetumei.pngにあるように、ダイアログを出したときに表示される行
数を動的に変更したいということです。この説明でわかりますでしょうか。

 このsetumei.pngのダイアログを表示させているソースが下記です。レイアウ
ト的にはデフォルトで、何も設定していません。


--
AlertDialog dialog = new AlertDialog.Builder(getContext())
.setTitle( moji )
.setItems(items, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
whitchBtn = which + 1;
}
}).show();
--

> TextViewの行数を3行にしたい ということですか?


>
> それならsetLinesというメソッドがあります。
>
> 例)
> TextView textview = (TextView)findViewById(R.id.TextView01);
> textview.setText("abc");
> textview.setLines(3);
>

 さっそく、夜子まま様の説明通りにやってみました。
--
// テキストビューを生成
TextView textview = new TextView(getContext());
textview.setLines(5); //←5行表示となることを期待


//レイアウトの生成
LinearLayout layout = new LinearLayout(getContext());

layout.addView(textview);


//ダイアログ
AlertDialog dialog = new AlertDialog.Builder(getContext())
.setView(layout)
.setTitle( moji )
.setItems(items, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
whitchBtn = which + 1;
}
}).show();
--

 結果、setline5.pngになりました。
 上記のソースだと、setLines(5)にしたのに、1行半くらいしか、表示されなく
なってしまいました。

 表示行数をコントロールするには、どうすればいいのでしようか。

 私が、ダイアログのレイアウトの設定方法をわかっていないだけだと思うので
す。どなたか、教えていただけませんでしょうか。

 よろしくお願いします。


(2011/01/18 9:20), yokmama wrote:
> 夜子ままです
>
> ちょっと意味が汲み取れないのですが
> TextViewの行数を3行にしたい ということですか?
>
> それならsetLinesというメソッドがあります。
>
> 例)
> TextView textview = (TextView)findViewById(R.id.TextView01);
> textview.setText("abc");
> textview.setLines(3);
>
>

> 2011年1月18日2:17 たろサ <taro...@gmail.com <mailto:taro...@gmail.com>>:

> E-Mail: taro...@gmail.com <mailto:taro...@gmail.com>


>
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に
> 送られています。
> このグループに投稿するには、android-g...@googlegroups.com

> <mailto:android-g...@googlegroups.com> にメールを送信してくだ
> さい。
> このグループから退会するには、android-group-
> japan+un...@googlegroups.com
> <mailto:android-group-japan%2Bunsu...@googlegroups.com> にメール
> を送信してください。
> 詳細については、http://groups.google.com/group/android-group-


> japan?hl=ja からこのグループにアクセスしてください。
>
>
>
>
> --
> *************************************************
> Re:Kayo-System Co.,Ltd.
>
> CEO Masafumi Terazono
> Blog http://kayosystem.blogspot.com/
> Twitter @yokmama
> *************************************************
>
>

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送ら
> れています。
> このグループに投稿するには、android-g...@googlegroups.com にメー
> ルを送信してください。
> このグループから退会するには、android-group-

> japan+un...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。

--

setumei.png
setline5.png

あんざいゆき

unread,
Jan 17, 2011, 10:56:38 PM1/17/11
to android-g...@googlegroups.com
あんざいです。

1行の高さを変えたいということですよね?
AlertDialog.Builder を使った場合テーマを指定することが
できいません(これすごく不便なんですけど)

AlertDialog のソースはこれです。

このなかの Builder クラスで
273         public Builder(Context context) {
274             this(context, com.android.internal.R.style.Theme_Dialog_Alert);
275         }
のように
Theme_Dialog_Alert というテーマを指定しています。

このひとは themes.xml にいます。


ここで以下のように定義されていて、
429     <style name="Theme.Dialog.Alert">
430         <item name="windowBackground">@android:color/transparent</item>
431         <item name="windowTitleStyle">@android:style/DialogWindowTitle</item>
432         <item name="windowIsFloating">true</item>
433         <item name="windowContentOverlay">@null</item>
434     </style>

Theme.Dialog を Theme に含まれる定義も継承しています。
Theme のなかで
81         <!-- List attributes -->
82         <item name="listPreferredItemHeight">64dip</item>
83         <!-- @hide -->
と定義されているのが、リストの1行の高さです。


で、ここからが本題ですが、AlertDialog に無理やり独自テーマを割り当てる
方法をブログで紹介しています。

Y.A.Mの雑記帳 「Android AlertDialogの背景を変更する」

---
全体を1つの背景にしたい場合、AlertDialog.Builder クラスには theme を指定する方法がないので、(下記のリンクメモにあるように、master ブランチには theme 付のコンストラクタがあるんだけどなぁ。。。)AlertDialog を extends した独自ダイアログをつくります。
---

より下の部分を参照してください
    <style name="MyDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@drawable/rect</item>
    </style>
    <style name="MyDialog" parent="@android:style/Theme.Dialog">
        <item name="android:listPreferredItemHeight">48dip</item>
    </style>

のようにすればサイズがかわると思います。

しかし、動的に変更したい場合は、AlertDialog.Builder ではなく
Dialog クラスを使ってリストを含んだダイアログを作成したほうがいいかもしれません。
ちなみに Dialog クラスならコンストラクタでテーマを指定できます。




2011年1月18日12:26 たろサ <taro...@gmail.com>:
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。




--
あんざい ゆき
anzai...@gmail.com
twitter : @yanzm
Y.A.Mの雑記帳 http://y-anz-m.blogspot.com/

たろサ

unread,
Jan 18, 2011, 1:01:19 AM1/18/11
to android-g...@googlegroups.com
 あんざい様、

 たろサです。
 非常にわかりやすい説明、ありがとうございます。

 http://android.git.kernel.orgを調べれば、ソースが見れるのですね。
 AlertDialogの位置づけが、だいたいわかりました。

> 1行の高さを変えたいということですよね?
> AlertDialog.Builder を使った場合テーマを指定することが
> できいません(これすごく不便なんですけど)

 はい、1行の高さを変えたいということです。

 AlertDialogは、簡単にダイアログを実装できるけれど、凝ったことをしたけ
れば、自分でDialogクラスを使って実装してね。という話なんだなと、理解しま
した。

 Dialogクラスを勉強して、listviewを実装するようなことを考えたいと思います。

 まだ、どうすればいいのか全く検討が付かないですが、またわからないことが
あれば質問すると思いますので、よろしくお願いします。


(2011/01/18 12:56), あんざいゆき wrote:
> あんざいです。
>
> 1行の高さを変えたいということですよね?
> AlertDialog.Builder を使った場合テーマを指定することが
> できいません(これすごく不便なんですけど)
>
> AlertDialog のソースはこれです。
> http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/app/AlertDialog.java;h=61a8fc3312f9a92e6db9ac1411f454003820d8a9;hb=HEAD
>
> このなかの Builder クラスで

> 273<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/app/AlertDialog.java;h=61a8fc3312f9a92e6db9ac1411f454003820d8a9;hb=HEAD#l273>
> public Builder(Context context) {
> 274<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/app/AlertDialog.java;h=61a8fc3312f9a92e6db9ac1411f454003820d8a9;hb=HEAD#l274>
> this(context,
> com.android.internal.R.style.Theme_Dialog_Alert);
> 275<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/app/AlertDialog.java;h=61a8fc3312f9a92e6db9ac1411f454003820d8a9;hb=HEAD#l275>
> }
> 276<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/app/AlertDialog.java;h=61a8fc3312f9a92e6db9ac1411f454003820d8a9;hb=HEAD#l276>


> のように
> Theme_Dialog_Alert というテーマを指定しています。
>
> このひとは themes.xml にいます。
> http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=040e732c62b987e7aec2e7133e6766694c274044;hb=HEAD
>
>
> ここで以下のように定義されていて、

> 429<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=040e732c62b987e7aec2e7133e6766694c274044;hb=HEAD#l429>
> <style name="Theme.Dialog.Alert">
> 430<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=040e732c62b987e7aec2e7133e6766694c274044;hb=HEAD#l430>


> <item name="windowBackground">@android:color/transparent</item>

> 431<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=040e732c62b987e7aec2e7133e6766694c274044;hb=HEAD#l431>


> <item name="windowTitleStyle">@android:style/DialogWindowTitle</item>

> 432<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=040e732c62b987e7aec2e7133e6766694c274044;hb=HEAD#l432>


> <item name="windowIsFloating">true</item>

> 433<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=040e732c62b987e7aec2e7133e6766694c274044;hb=HEAD#l433>


> <item name="windowContentOverlay">@null</item>

> 434<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=040e732c62b987e7aec2e7133e6766694c274044;hb=HEAD#l434>


> </style>
>
> Theme.Dialog を Theme に含まれる定義も継承しています。
> Theme のなかで

> 81<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=040e732c62b987e7aec2e7133e6766694c274044;hb=HEAD#l81>
> <!-- List attributes -->
> 82<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=040e732c62b987e7aec2e7133e6766694c274044;hb=HEAD#l82>


> <item name="listPreferredItemHeight">64dip</item>

> 83<http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=040e732c62b987e7aec2e7133e6766694c274044;hb=HEAD#l83>

>>> japan+un...@googlegroups.com<japan%2Bunsu...@googlegroups.com>
>>> <mailto:android-group-japan%2Bunsu...@googlegroups.com<android-group-japan%252Buns...@googlegroups.com>>


>> にメール
>>> を送信してください。
>>> 詳細については、http://groups.google.com/group/android-group-
>>> japan?hl=ja からこのグループにアクセスしてください。
>>>
>>>
>>>
>>>
>>> --
>>> *************************************************
>>> Re:Kayo-System Co.,Ltd.
>>>
>>> CEO Masafumi Terazono
>>> Blog http://kayosystem.blogspot.com/
>>> Twitter @yokmama
>>> *************************************************
>>>
>>>
>>> --
>>> このメールは Google グループのグループ「日本Androidの会」の登録者に送ら
>>> れています。
>>> このグループに投稿するには、android-g...@googlegroups.com にメー
>>> ルを送信してください。
>>> このグループから退会するには、android-group-

>>> japan+un...@googlegroups.com<japan%2Bunsu...@googlegroups.com>にメールを送信してください。


>>> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
>>> からこのグループにアクセスしてください。
>>
>> --
>> 山本三七男 (Minao Yamamoto) ---------------- ハンドル:たろサ -----
>> E-Mail: taro...@gmail.com
>>
>> --
>> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
>> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。

>> このグループから退会するには、android-group-j...@googlegroups.com<android-group-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
>> 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。

Reply all
Reply to author
Forward
0 new messages