

androidでアプリ一覧を作成しており、最下部にアプリ一覧とは別のボタンを配置しようとしています。  
ところがボタンを配置したところ、一覧のすべてにボタンが重なって付与されてしまいます。  
（リスト一覧の部品の一部としてボタンが扱われているように見えます。）  
リスト一覧とは別に、最下部にボタンを配置する方法はありますでしょうか？3日くらい悩んでいるので、助けて頂ければ嬉しいです。

（xml内では、RelativeLayout(横)内にImageView、TextView、TextView、LinearLayoutを定義し、LinearLayout内にボタンを定義しております。  
アプリ一覧のリストは、listViewとArrayAdapterを使用して実装しております。）

## LancherApp.java

[code]

    public class LancherApp extends Activity {
    
    //
    private ArrayList<String> items = null;
    //
    private ApplicationListAdapter adapter = null;
    
    @Override
    protected void onCreate (Bundle bundle) {
        super.onCreate (bundle);
        requestWindowFeature (Window.FEATURE_NO_TITLE);
    
        setContentView (R.layout.activity_main);
        // create String Arraylist.
        List<AppData> appList = new ArrayList<AppData>();
        // create PackageManager.
        PackageManager packageManager = getPackageManager();
        // make application list in your device has already installed.
        final List<ApplicationInfo> installedAppList = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
    
        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);
        }
    
        final ListView listView = new ListView(this);
        adapter = new ApplicationListAdapter(this, appList);
        listView.setAdapter(adapter);
    
        setContentView(listView);
    }
    
        // private Adapter Class indicates label and icon of application.
        private static class ApplicationListAdapter extends ArrayAdapter<AppData> {
        //
        private final LayoutInflater mInflater;
    
        public ApplicationListAdapter (Context context, List<AppData> dataList) {
            super(context, R.layout.activity_main);
            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.activity_main, 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);
            convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
    
        //
        final AppData data = getItem(position);
        //
            holder.textLabel.setText(data.label);
            holder.imageIcon.setImageDrawable(data.icon);
            holder.packageName.setText(data.name);
    
        return convertView;
        }
    }
    
    // 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;
    }
    
[/code]

## activity_main.xml

[code]

    <?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_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_weight="1"/>
    
        <TextView
            android:id="@+id/label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/icon"
            android:textSize="18sp"
            android:layout_weight="1"/>
    
        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/label"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/label"
            android:layout_weight="1" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentStart="true"
            android:orientation="vertical">
    
        <Button
            android:id="@+id/button4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_weight="1"
            android:text="Button" />
        </LinearLayout>
    
    </RelativeLayout>
    
[/code]


CC BY-SA 3.0
2018-03-21T02:25:15.087
42531
2018-03-25T04:15:57.663
2018-03-23T13:38:01.653
27820
27820
question
android android-layout
アプリ一覧の最下部にボタンを追加したい


ListView の一つの要素のレイアウトと、画面全体のレイアウトは、別々の XML ファイルに書きます。

例えば、イメージとして、

ListView の一つの要素のレイアウトは、  

[code]

    <RelativeLayout>
      <ImageView/>
      <TextView/>
      <TextView/>
    </RelativeLayout>
    
[/code]

画面全体のレイアウトは、  

[code]

    <LinearLayout>
      <ListView/>
      <Button/>
    </LinearLayout>
    
[/code]

のようにします。

Java のコードの方では、

  * setContentView() は画面全体のレイアウト
  * Adapter では一つの要素のレイアウト

をそれぞれ指定します。

ListView は画面全体のレイアウトの方で作ってありますので、`new ListView(this)`
で作る必要はありません。`findViewById()` で取得してください。

結果として、以下のような感じになると思います (コンパイルすら試していませんのでご注意ください)。

Java コード: LancherApp.java:  

[code]

    public class LancherApp extends Activity {
    
        //
        private ArrayList<String> items = null;
        //
        private ApplicationListAdapter adapter = null;
    
        @Override
        protected void onCreate (Bundle bundle) {
            super.onCreate (bundle);
            requestWindowFeature (Window.FEATURE_NO_TITLE);
    
            setContentView (R.layout.activity_main);
            // create String Arraylist.
            List<AppData> appList = new ArrayList<AppData>();
            // create PackageManager.
            PackageManager packageManager = getPackageManager();
            // make application list in your device has already installed.
            final List<ApplicationInfo> installedAppList = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
    
            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);
            }
    
            final ListView listView = (ListView) findViewById(R.id.list);
            adapter = new ApplicationListAdapter(this, appList);
            listView.setAdapter(adapter);
        }
    
        // private Adapter Class indicates label and icon of application.
        private static class ApplicationListAdapter extends ArrayAdapter<AppData> {
            //
            private final LayoutInflater mInflater;
    
            public ApplicationListAdapter (Context context, List<AppData> dataList) {
                super(context, R.layout.list_item);
                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.list_item, 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);
                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder) convertView.getTag();
                }
    
                //
                final AppData data = getItem(position);
                //
                holder.textLabel.setText(data.label);
                holder.imageIcon.setImageDrawable(data.icon);
                holder.packageName.setText(data.name);
    
                return convertView;
            }
        }
    
        // 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;
        }
    }
    
[/code]

画面全体のレイアウト: activity_main.xml:  

[code]

    <?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">
    
        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"/>
    
        <Button
            android:id="@+id/button4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Button" />
    
    </LinearLayout>
    
[/code]

一つの要素のレイアウト: list_item.xml:  

[code]

    <?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_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_weight="1"/>
    
        <TextView
            android:id="@+id/label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/icon"
            android:textSize="18sp"
            android:layout_weight="1"/>
    
        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/label"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/label"
            android:layout_weight="1" />
    
    </RelativeLayout>
    
[/code]


CC BY-SA 3.0
2018-03-24T02:09:22.220
42621
2018-03-25T04:15:57.663
2018-03-25T04:15:57.663
5288
5288
42531
answer