1. 取消标题栏
values->styles.xml中:
在当先使用的style的parent属性添加NoActionBar.如原先为
style name="AppTheme" parent="Theme.AppCompat.Light".
修改后为
style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"
2.
ListView简单方法
···1. 在xml下新建一个ListView项目
···2. 在主活动中加入:
public class MainActivity extends AppCompatActivity { private String[] data={"apple","pear","watermelon","grape" ,"strawberry","cherry","banana","melon","orange","blueberry","akb","hkt","nmb","ske","ngt","stu"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayAdapter<String> fruits=new ArrayAdapter<String>(MainActivity.this ,android.R.layout.simple_list_item_1,data); ListView listView=(ListView)findViewById(R.id.list_view); listView.setAdapter(fruits); } }
!!!数组中的数据无法直接传递给ListView,需要借助适配器,最好用的是ArrayAdapter,用来指定为String类型,在构造函数中把要适配的数据传入即可,有三个参数,第一个为上下文--MainActivity.this,第二个是ListView子项布局的id[android.R.layout.simple_list_item_1],第三个是要适配的数据
最后实现ListView与数据之间的关联--setAdapter
3. 定制ListView界面
···1.定义一个实体类,作为ListView适配器的适配内容
public class Fruit { private String name; private String price; public Fruit(String name,String price){ this.name=name; this.price=price; } public String getName() { return name; } public String getPrice() { return price; } }
···2.新建布局在layout目录下
<?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"> <TextView android:id="@+id/fruit_name" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="30sp" android:textColor="#000000" android:layout_weight="1" /> <TextView android:textColor="#000000" android:id="@+id/fruit_price" android:textSize="30sp" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_weight="1" android:gravity="right" /> </LinearLayout>
···3.创建新的适配器,继承自ArrayAdapter,并泛类型为fruit
package com.example.zzz.listviewdemo; import android.content.Context; import android.text.Layout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import java.util.List; /** * Created by zzz on 2017/8/7. */ public class FruitAdapter extends ArrayAdapter <Fruit>{ private int resourceid; public FruitAdapter(Context context, int textVi, List<Fruit> objects){ super(context,textVi,objects); resourceid=textVi; } public View getView(int pos, View con, ViewGroup par) { Fruit fruit=getItem(pos); View view= LayoutInflater.from(getContext()).inflate(resourceid,null); TextView textView=(TextView)view.findViewById(R.id.fruit_name); TextView textView1=(TextView)view.findViewById(R.id.fruit_price); textView.setText(fruit.getName()); textView1.setText(fruit.getPrice()); return view; } }
重写了构造函数和getView()函数[这个函数在每个子项被滚动到屏幕内的时候都会被调用]
···4.修改主活动代码
package com.example.zzz.listviewdemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private List<Fruit> fruitList=new ArrayList<Fruit>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFruits(); FruitAdapter fruits=new FruitAdapter(MainActivity.this ,R.layout.layout,fruitList); ListView listView=(ListView)findViewById(R.id.list_view); listView.setAdapter(fruits); } private void initFruits(){ Fruit apple=new Fruit("apple","3"); fruitList.add(apple); Fruit pear=new Fruit("pear","3"); fruitList.add(pear); Fruit orange=new Fruit("orange","3"); fruitList.add(orange); Fruit apple1=new Fruit("apple1","3"); fruitList.add(apple1); Fruit pear1=new Fruit("pear1","3"); fruitList.add(pear1); Fruit orange1=new Fruit("orange1","3"); fruitList.add(orange1); Fruit apple2=new Fruit("apple2","3"); fruitList.add(apple2); Fruit pear2=new Fruit("pear2","3"); fruitList.add(pear2); Fruit orange3=new Fruit("orange3","3"); fruitList.add(orange3); } }
5. 适配器:就是把一些数据给弄得适当,适合以便于在View上显示。可以看作是界面数据绑定的一种理解。它所操纵的数据一般都是一些比较复杂的数据,如数组,链表, 数据库,集合等。适配器就像显示器,把复杂的东西按人可以接受的方式来展现。
常见方法有:
public int getCount() //得到数据的行数
public Object getItem(int position)//根据position得到某一行的记录
public long getItemId(int position)//的到某一条记录的ID
//下面这个方法是最重要的相比于其它几个方法,它显式的定义了,适配器将要以什么样的方式去显示我们所填充的数据,在自定义的适配器里面我们通常会给它写个布局文件
public View getView(int position, View convertView, ViewGroup parent)
6. 提升ListView的运行效率
package com.example.zzz.listviewdemo; import android.content.Context; import android.text.Layout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import java.util.List; /** * Created by zzz on 2017/8/7. */ public class FruitAdapter extends ArrayAdapter <Fruit>{ private int resourceid; public FruitAdapter(Context context, int textVi, List<Fruit> objects){ super(context,textVi,objects); resourceid=textVi; } public View getView(int pos, View con, ViewGroup par) { Fruit fruit=getItem(pos); View view; ViewHolder viewHolder; if (con==null) { view = LayoutInflater.from(getContext()).inflate(resourceid, null); viewHolder=new ViewHolder(); viewHolder.name=(TextView)view.findViewById(R.id.fruit_name); viewHolder.price=(TextView)view.findViewById(R.id.fruit_price); view.setTag(viewHolder); }else { view=con; viewHolder=(ViewHolder) view.getTag(); } viewHolder.name.setText(fruit.getName()); viewHolder.price.setText(fruit.getPrice()); return view; } } class ViewHolder{ TextView name; TextView price; }
7. 给ListView子项添加点击事件
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFruits(); FruitAdapter fruits=new FruitAdapter(MainActivity.this ,R.layout.layout,fruitList); ListView listView=(ListView)findViewById(R.id.list_view); listView.setAdapter(fruits); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fruit fruit1=fruitList.get(position); Toast.makeText(MainActivity.this,"你点击了"+fruit1.getName(),Toast.LENGTH_SHORT).show(); } }); }
8.尺寸:在编写程序时,如果必须要指定一个值,则使用dp(dip)来作为单位,指定文字大小时,则使用sp作为单位