前提・実現したいこと
androidでアプリ一覧を作成しており、最下部にアプリ一覧とは別のボタンを配置しようとしています。
ところがボタンを配置したところ、一覧のすべてにボタンが重なって付与されてしまいます。
(リスト一覧の部品の一部としてボタンが扱われているように見えます。)
リスト一覧とは別に、最下部にボタンを配置する方法はありますでしょうか?3日くらい悩んでいるので、助けて頂ければ嬉しいです。
(item_list.xmlというアイテム用のレイアウトファイルを別途作成し、それをactivity_main.xmlのlistViewに渡しています。
アプリ一覧のリストは、listViewとArrayAdapterを使用して実装しております。)
LancherApp.java
public class LancherApp extends Activity { @Override protected void onCreate (Bundle bundle) { super.onCreate (bundle); requestWindowFeature (Window.FEATURE_NO_TITLE); setContentView (R.layout.activity_main); // Get installed app info from device. PackageManager packageManager = getPackageManager(); final List<ApplicationInfo> installedAppList = packageManager.getInstalledApplications(PackageManager.GET_META_DATA); // Stack data to list. final List<AppData> appList = new ArrayList<AppData>(); for (ApplicationInfo app : installedAppList) { AppData data = new AppData(); data.label = app.loadLabel(packageManager).toString(); data.icon = app.loadIcon(packageManager); data.name = app.packageName; appList.add (data); } // Show app list to listview. ListView listView = new ListView(this); listView = (ListView) findViewById(R.id.card_list); ViewGroup parentView = (ViewGroup) listView.getParent(); if (parentView != null) { parentView.removeView(listView); } listView.setAdapter(new ApplicationListAdapter(this, appList)); setContentView(listView); } private static class ApplicationListAdapter extends ArrayAdapter<AppData> { // private final LayoutInflater mInflater; public ApplicationListAdapter (Context context, List<AppData> dataList) { //super(context, R.layout.activity_main); super(context, 0); mInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); addAll(dataList); } @Override public View getView (int position, View convertView, ViewGroup parent) { ViewHolder holder = new ViewHolder(); if (convertView == null) { convertView = mInflater.inflate(R.layout.item_list, parent, false); holder.textLabel = (TextView) convertView.findViewById(R.id.label); holder.imageIcon = (ImageView) convertView.findViewById(R.id.icon); holder.packageName = (TextView) convertView.findViewById(R.id.name); ViewGroup parentView = (ViewGroup) convertView.getParent(); if (parentView != null) { parentView.removeView(convertView); } convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } // Get data to show. final AppData data = getItem(position); // Set label & icon to listview. holder.textLabel.setText(data.label); holder.imageIcon.setImageDrawable(data.icon); holder.packageName.setText(data.name); return convertView; } } // final AppData data = getItem(position); // holder.textLabel.setText(data.label); holder.imageIcon.setImageDrawable(data.icon); holder.packageName.setText(data.name); // private class for storing application data. private static class AppData { String label; Drawable icon; String name; } // private class ViewHolder. private static class ViewHolder { TextView textLabel; ImageView imageIcon; TextView packageName; }
activity_main.xml
<?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"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="50dp" android:gravity="center" android:text="Button" /> <ListView android:id="@+id/card_list" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView> </LinearLayout>
item_list.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/icon" android:layout_width="50dp" android:layout_height="50dp" android:layout_below="@+id/button" /> <TextView android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/button" android:layout_toRightOf="@+id/icon" android:textSize="18sp" /> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/label" android:layout_below="@+id/label" /> </RelativeLayout>