• Android:有关下拉菜单导航的学习(供自己参考)


    Android:有关下拉菜单导航的学习

    因为先前的学习都没想着记录自己的学习历程,所以该博客才那么迟才开始写。

    内容: 下拉菜单导航

    学习网站:android Spinner控件详解

    Spinner提供了从一个数据集合中快速选择一项值的办法。默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。

    阶段一:最简单的Spinner

    1、在布局文件中添加Spinner控件

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.dropdownlayout.MainActivity">
    
        //AppBarLayout和Toolbar是对布局页面顶部的条进行操作
        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.AppBarOverlay">
    
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:popupTheme="@style/AppTheme.PopupOverlay" />
            
            //该部分才是下拉菜单的本体
            <Spinner
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/spinner"
                android:entries="@array/places"></Spinner>//从这行可以看到资源都是从@array来的,因此需要一个这样的存放资源的xml文件
    
        </android.support.design.widget.AppBarLayout>
    
    
        <include layout="@layout/content_main" />
    
    
    
    
    </android.support.design.widget.CoordinatorLayout>
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="places">
            <item>Beijing</item>
            <item>Guangzhou</item>
            <item>Shanghai</item>
        </string-array>
    </resources>
    

    效果:

    但是这个终究只是效果,若要对选择进行回应就需要更加复杂的步骤来完善。一般情况下我们是需要响应Spinner选择事件的,可以通过OnItemSelectedListener的回调方法实现

    MainActivity:

    package com.example.dropdownlayout;
    
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.AdapterView;
    import android.widget.Spinner;
    import android.widget.SpinnerAdapter;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener{
    
        private Spinner spinner ;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            initUI();
        }
    
        private void initUI(){
            spinner = (Spinner)findViewById(R.id.spinner);
            spinner.setOnItemSelectedListener(this);
        }
    
    
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                String[] places = getResources().getStringArray(R.array.places);
            Toast.makeText(MainActivity.this,"你点击的是:"+places[i],Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
    
        }
    }
    
    

    效果:

    阶段二:学会设置Spinner的BaseAdapter

    通过BaseAdapter可以自定义自己的菜单形式,但菜单的形式需要自己来设计

    spinnerview:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/personName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="personName  "
            android:textSize="20dp"
            android:textColor="@color/colorAccent"/>
    
        <TextView
            android:id="@+id/personAddress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="personAddress"
            android:textSize="20dp"
            android:textColor="@color/colorAccent"/>
    
    </LinearLayout>
    

    main.xml中的spinner要把enteries这一项去掉。

    Person.java

    package com.example.dropdownlayout;
    
    /**
     * Created by Funny_One on 2017/8/18.
     */
    
    public class Person {
        public String personName,personAddress;
    
        public Person(String personName,String personAddress){
            this.personAddress = personAddress;
            this.personName = personName;
        }
    
        public String getPersonAddress() {
            return personAddress;
        }
    
        public String getPersonName() {
            return personName;
        }
    }
    
    

    Myadapter.java

    package com.example.dropdownlayout;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.TextView;
    
    import java.util.List;
    
    /**
     * Created by Funny_One on 2017/8/18.
     */
    
    public class Myadapter extends BaseAdapter {
    
        public List<Person> mList;
        public Context context;
        public View mView;
    
        public Myadapter(Context context,List<Person> mList){
            this.mList = mList;
            this.context = context;
        }
    
        @Override
        public int getCount() {
            return mList.size();
        }
    
        @Override
        public Object getItem(int i) {
            return mList.get(i);
        }
    
        @Override
        public long getItemId(int i) {
            return i;
        }
    
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            mView = layoutInflater.inflate(R.layout.spinnerview,null);
            TextView personName = (TextView)mView.findViewById(R.id.personName);
            TextView personAddress=(TextView)mView.findViewById(R.id.personAddress);
            personAddress.setText(mList.get(i).getPersonAddress());
            personName.setText(mList.get(i).getPersonName());
            return mView;
        }
    }
    
    

    MainActivity:

        package com.example.dropdownlayout;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Spinner;
    import android.widget.SpinnerAdapter;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends Activity {
    
        private Spinner spinner ;
        private List<Person> persons;
        private Myadapter myadapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            spinner = (Spinner)findViewById(R.id.spinner);
            persons = new ArrayList<Person>();
            persons.add(new Person(" 袁逸灏 "," 广东 "));
            persons.add(new Person(" 春旺 "," 云南 "));
            persons.add(new Person(" 刘先润 "," 重庆 "));
            persons.add(new Person(" 刘诚昊 "," 湖南 "));
            myadapter = new Myadapter(this,persons);
    
            spinner.setAdapter(myadapter);
        }
    
    
    }
    
    

    效果:

  • 相关阅读:
    黑产上演《三体》剧情:蠕虫病毒入侵手机群发“钓鱼”短信
    安天AVL联合小米MIUI首擒顽固病毒“不死鸟”
    阿里云存储OSS服务端签名客户端直传
    mariadb 安装配置
    NPOI 打印设置
    windows2008 r2 网络负载均衡搭建
    SqlServer数据库技巧
    达梦数据库备份还原
    ASP.NET CORE Docker发布记录
    DataReader转换
  • 原文地址:https://www.cnblogs.com/VersionP1/p/7498343.html
Copyright © 2020-2023  润新知