はじめまして。こちらAndroidアプリ開発に聞いてもよかったでしょうか?
現在、Androidアプリを作成中です。(SDKは16です)
ダイアログを表示して、ListViewを組み込み、行をカスタム表示しているのですが、
HTMLのような一行内に列・行が複数入れられず、困ってます。
一行データとして表示したいのはこんな感じです。
-----------------------------------------
①説明
-----------------------------------------
②画像1|③画像2|④画像3
| |
-----------------------------------------
ListViewを使わないと縦スクロールも効かず、
ListViewを使うと一行データはLinerLayoutで縦並び or 横並びしか指定できません。
TableLayout,FrameLayoutありそうなものは色々調べたつもりですが・・、コンパイルはできても
表示時にエラーで止まってしまいます。
お分かりになる方いましたら、よろしくお願いします。
Android ListViewのカスタムView
Re: Android ListViewのカスタムView
すみません。
肝心の質問について。
このような行を表示する一覧のコンポーネントは何が良いのでしょうか?
肝心の質問について。
このような行を表示する一覧のコンポーネントは何が良いのでしょうか?
Re: Android ListViewのカスタムView
調べて頂き、ありがとうございます。
実は私もずっとListViewを使用する際はこのカスタムViewを使っています。
ただ、それは上記のLinearLayout と同様に一方向しか指定できません。縦か横か。
私の場合、上記のように1、2は縦、2~4は横の構成となります。
縦・横に限らず、絶対値(座標)のカスタム形式でも良いのですが、
私が探したり、試した限り、存在せず、困ってます。
ListView以外には、このようなLayoutの配置系はTableLayout,FrameLayoutなどいくつかあるのですが、
ListView内のカスタムでは使えないようなのです。
或いはListLinearLayout iewも否定して他のコントロールで実現できるのであれば
何でも構わないのですが。。
実は私もずっとListViewを使用する際はこのカスタムViewを使っています。
ただ、それは上記のLinearLayout と同様に一方向しか指定できません。縦か横か。
私の場合、上記のように1、2は縦、2~4は横の構成となります。
縦・横に限らず、絶対値(座標)のカスタム形式でも良いのですが、
私が探したり、試した限り、存在せず、困ってます。
ListView以外には、このようなLayoutの配置系はTableLayout,FrameLayoutなどいくつかあるのですが、
ListView内のカスタムでは使えないようなのです。
或いはListLinearLayout iewも否定して他のコントロールで実現できるのであれば
何でも構わないのですが。。
Re: Android ListViewのカスタムView
ごめんなさい。修正です。
>或いはListLinearLayout iewも否定して他のコントロールで実現できるのであれば
○或いはListViewも否定して他のコントロールで実現できるのであれば
>或いはListLinearLayout iewも否定して他のコントロールで実現できるのであれば
○或いはListViewも否定して他のコントロールで実現できるのであれば
Re: Android ListViewのカスタムView
このようなレイアウトを使ってbobo さんが書きました:実は私もずっとListViewを使用する際はこのカスタムViewを使っています。
ただ、それは上記のLinearLayout と同様に一方向しか指定できません。縦か横か。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/first_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/second_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/third_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
このレベルで実機では動かないということはないと思うのですが。
Re: Android ListViewのカスタムView
ありがとうございます。
べたがきで書きますと以下、横に並列して表示しているのですが。
このようになります。(パッケージ化しており、分かりづらいかもしれませんが、ImageViewやTextViewを生成してるだけです)
ご指摘頂いた点も試してみたのです(Javaコードですが)が、
正常に動きません。
こちらのソースと違う点ですが、私のこのカスタムViewをDialog内に仕込んでいる点と
xmlでは無く、Javaで記述している事です。
下記、「convertView=layout;」で2階層のLinearLayoutで生成できそうな気もしたのですが、
コンパイルエラーとなったり、リストが全く表示されなくなったりと混乱し、
もっと簡潔に実現できるコントロールが無いか探してきた次第です。
べたがきで書きますと以下、横に並列して表示しているのですが。
このようになります。(パッケージ化しており、分かりづらいかもしれませんが、ImageViewやTextViewを生成してるだけです)
ご指摘頂いた点も試してみたのです(Javaコードですが)が、
正常に動きません。
こちらのソースと違う点ですが、私のこのカスタムViewをDialog内に仕込んでいる点と
xmlでは無く、Javaで記述している事です。
下記、「convertView=layout;」で2階層のLinearLayoutで生成できそうな気もしたのですが、
コンパイルエラーとなったり、リストが全く表示されなくなったりと混乱し、
もっと簡潔に実現できるコントロールが無いか探してきた次第です。
private class DialogAdapter extends BaseAdapter {
//セルのビューの生成
@Override
public View getView(int idx, View convertView, ViewGroup parent) {
CardDisp item=list.get(idx);
//レイアウトの生成
if (convertView==null) {
LinearLayout layout=ApCard.makeLinearLayout(CardDialog.context,Color.rgb(32,32,32),0,0,0,0,null,null,null);
convertView=layout;
//テキストスタイル
layout.addView(ApCard.makeTextView(CardDialog.context,"disp",null,Color.rgb(255,255,255),14,3,28,0,0,new LinearLayout.LayoutParams(45,LinearLayout.LayoutParams.WRAP_CONTENT),Gravity.CENTER,null));
//アイコンスタイル
layout.addView(ApCard.makeImageView(CardDialog.context,"icon1",0,5,0,0,new LinearLayout.LayoutParams(50,82)));
layout.addView(ApCard.makeImageView(CardDialog.context,"icon2",-22,5,0,0,new LinearLayout.LayoutParams(28,82)));
layout.addView(ApCard.makeImageView(CardDialog.context,"icon3",-22,5,0,0,new LinearLayout.LayoutParams(28,82)));
layout.addView(ApCard.makeImageView(CardDialog.context,"icon4",-22,5,0,0,new LinearLayout.LayoutParams(28,82)));
layout.addView(ApCard.makeImageView(CardDialog.context,"icon5",-22,5,0,0,new LinearLayout.LayoutParams(28,82)));
layout.addView(ApCard.makeImageView(CardDialog.context,"icon6",-22,5,0,0,new LinearLayout.LayoutParams(28,82)));
layout.addView(ApCard.makeImageView(CardDialog.context,"icon7",-22,5,0,0,new LinearLayout.LayoutParams(28,82)));
layout.addView(ApCard.makeImageView(CardDialog.context,"icon8",-22,5,0,0,new LinearLayout.LayoutParams(28,82)));
}
//※ここで値をセットしないとViewのキャッシュが効いてスクロール時に正しく表示されない
((TextView)convertView.findViewWithTag("disp")).setText(item.disp);
((ImageView)convertView.findViewWithTag("icon1")).setImageBitmap(item.img1);
((ImageView)convertView.findViewWithTag("icon2")).setImageBitmap(item.img2);
((ImageView)convertView.findViewWithTag("icon3")).setImageBitmap(item.img3);
((ImageView)convertView.findViewWithTag("icon4")).setImageBitmap(item.img4);
((ImageView)convertView.findViewWithTag("icon5")).setImageBitmap(item.img5);
((ImageView)convertView.findViewWithTag("icon6")).setImageBitmap(item.img6);
((ImageView)convertView.findViewWithTag("icon7")).setImageBitmap(item.img7);
((ImageView)convertView.findViewWithTag("icon8")).setImageBitmap(item.img8);
return convertView;
}
}
Re: Android ListViewのカスタムView
自己解決です。
ご指摘のXMLから、もう一度、プロパティをじっくり見直しました。
layout.addView(layout1);
このようにaddViewするだけで大丈夫でした。
お騒がせしてすみませんでした。
また、ご助言頂いた方には感謝です。
ご指摘のXMLから、もう一度、プロパティをじっくり見直しました。
layout.addView(layout1);
このようにaddViewするだけで大丈夫でした。
お騒がせしてすみませんでした。
また、ご助言頂いた方には感謝です。
//レイアウトの生成
if (convertView==null) {
LinearLayout layout=ApCard.makeLinearLayout(CardDialog.context,Color.rgb(32,32,32),0,0,0,0,LinearLayout.VERTICAL,null,null);
//テキストスタイル
layout.addView(ApCard.makeTextView(CardDialog.context,"disp",null,null,Color.rgb(255,255,255),14,2,2,0,0,new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT),Gravity.CENTER,null));
LinearLayout layout1=ApCard.makeLinearLayout(CardDialog.context,Color.rgb(32,32,32),0,0,0,0,LinearLayout.HORIZONTAL,null,null);
layout.addView(layout1);
convertView=layout;
//アイコンスタイル
layout1.addView(ApCard.makeImageView(CardDialog.context,"icon1",0,0,0,0,new LinearLayout.LayoutParams(50,82)));
layout1.addView(ApCard.makeImageView(CardDialog.context,"icon2",0,0,0,0,new LinearLayout.LayoutParams(50,82)));
layout1.addView(ApCard.makeImageView(CardDialog.context,"icon3",0,0,0,0,new LinearLayout.LayoutParams(50,82)));
layout1.addView(ApCard.makeImageView(CardDialog.context,"icon4",0,0,0,0,new LinearLayout.LayoutParams(50,82)));
layout1.addView(ApCard.makeImageView(CardDialog.context,"icon5",0,0,0,0,new LinearLayout.LayoutParams(50,82)));
layout1.addView(ApCard.makeImageView(CardDialog.context,"icon6",0,0,0,0,new LinearLayout.LayoutParams(50,82)));
layout1.addView(ApCard.makeImageView(CardDialog.context,"icon7",0,0,0,0,new LinearLayout.LayoutParams(50,82)));
layout1.addView(ApCard.makeImageView(CardDialog.context,"icon8",0,0,0,0,new LinearLayout.LayoutParams(50,82)));
}