Android 开发基础(五):图片、列表、导航栏、日期选择控件

本文详细介绍了Android开发中常用的UI控件,包括ImageView、ListView、ActionBar等的使用方法及优化技巧,如图片切换、列表视图资源优化、菜单创建及日期选择控件的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(个人经验,仅供参考,错误之处,敬请谅解)

图片 (ImageView)

<ImageView
     android:layout_width="--"
     android:layout_height="--"
     android:scaleType="--"  //如何缩放
     android:tint="--"       //着色
     android:src="--"        //图片源文件
     android:id="--"/>

setImageResouce() 改变图片源文件

  切换图片:
    1、点击切换(onClick事件)
    2、滑动切换(onTouch事件)

imgview.setClickable(true);
imgview.setOnTouchListener(new View.OnTouchListener() {
	int oldx;
    @Override
    public boolean onTouch(View v, MotionEvent event) {
         switch (event.getAction()){
             case MotionEvent.ACTION_DOWN://按下
    	         oldx= (int) event.getX();
                 break;
             case MotionEvent.ACTION_UP://抬起
                 if(event.getX()>oldx){//右滑,前一张图片
        	         imgid--;
                         if(imgid<0)imgid=imgs.length-1;
                 }
                 else {
                     imgid++;
                     if(imgid==imgs.length)imgid=0;
                 }
                 imgview.setImageResource(imgs[imgid]);
                 break;
         }
         return false;
   }       
});

列表 (ListView)

<ListView
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:entries="--"
     android:divider="--"  //显示分割图形
     android:id="@+id/listView"/>

listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    }
});

//长按
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
    return true;  //true 不触发单击事件,false触发单击事件
    }
});

  使用BaseAdapter时对listview的资源优化示例:
  功能与RecyclerView类似

private class MyBaseAdapter extends BaseAdapter {
    @Override
    public int getCount() {
        return names.length;
    }

    @Override
    public Object getItem(int position) {
        return names[position];
    }
    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        MyHolder myHolder;
        if(convertView==null){
            convertView=getLayoutInflater().inflate(R.layout.staritem_layout,null);
            myHolder=new MyHolder();
            myHolder.img= (ImageView)convertView.findViewById(R.id.item_img);
            myHolder.txt= (TextView) convertView.findViewById(R.id.item_tv);
            convertView.setTag(myHolder);
        }
        else{
            myHolder= (MyHolder) convertView.getTag();
        }
        myHolder.img.setImageResource(imgs[position]);
        myHolder.txt.setText(names[position]);
        return convertView;
    }
}
class MyHolder{
    ImageView img;
    TextView txt;
}

导航栏 (ActionBar)

ActionBar actionBar = getActionBar();                //如果返回空指针,使用getSupportActionBar()
actionBar.setDisplayHomeAsUpEnabled(true);           //启用向上导航功能
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case R.id.home:
            finish();
            break;
   	}
    return super.onOptionsItemSelected(item);
}

常用菜单:

  1. 选项菜单 (OptionsMenu)
  2. 快捷菜单 (ContextMenu)
  3. 子菜单 (SubMenu)
  4. 弹出菜单 (PopupMenu)
1、
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.mymenu,menu);
 	return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
            case R.id.about:
                break;
            case R.id.help:
                break;
    }
    return super.onOptionsItemSelected(item);
}
2、
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
     super.onCreateContextMenu(menu, v, menuInfo);
     getMenuInflater().inflate(R.menu.contextmenu,menu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()){
         case R.id.c1:
                break;
    }
    return super.onContextItemSelected(item);
}

3、双层嵌套
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/about"
          android:title="关于"
          >
        <menu>
            <item android:title="111"/>
            <item android:title="2222"/>
        </menu>
    </item>
    <item android:id="@+id/help"
          android:title="帮助"/>
</menu>

4、
public void showPopupmen(View v){
    PopupMenu popupMenu=new PopupMenu(this,v);
    getMenuInflater().inflate(R.menu.mymenu,popupMenu.getMenu());
    popupMenu.show();
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()){
                case R.id.about:
                    break;
                case R.id.help:
                    break;
            }
            return false;
        }
    });
}

  xml文件布局中的showAsAction属性:

always表示永远显示在ActionBar中,如果屏幕空间不够则无法显示
ifRoom表示屏幕空间够的情况下显示在ActionBar中,不够的话就显示在overflow中
never则表示永远显示在overflow中

日期选择控件 (DatePicker)

  1. 以布局形式
<DatePicker
            android:layout_width="--"
            android:layout_height="--"
            android:theme="--"
            android:calendarViewShown="false"
            android:id="@+id/datePicker"/>

public void getDate(View v){
        int year,month,day;
        year=dp.getYear();
        month=dp.getMonth();
        day=dp.getDayOfMonth();
       
    }
  1. 以对话框i形式
public void search2(View v){
        int year,month,day;
        Calendar ca=Calendar.getInstance();
        year=ca.get(Calendar.YEAR);
        month=ca.get(Calendar.MONTH);
        day=ca.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog dpd=new DatePickerDialog(this,
                AlertDialog.THEME_HOLO_LIGHT,
                new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            
            }
        },year,month,day);
        dpd.show();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值