头像选择主要用到的是两个知识,一个是调用activity,一个是网格视图。总体思路是:新建两个布局文件,xml1是可供选择头像页面的视图,xml2是每个头像的视图。在默认生成的xml文件中新建一个ImageView框出一块用来放头像,新建一个Button来进入头像选择页面。

<ImageView
    android:layout_width="100dp"
    android:layout_centerHorizontal="true"
    android:layout_margin="20dp"
    android:layout_height="100dp"
    android:id="@+id/kuang"
    />
    <Button
        android:id="@+id/anniu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_margin="150dp"
        />

在MainActivity中,先重写OnCreat方法,在里面为button建立单击事件监听器,通过Intent把主activity与要调用的activity连接起来,然后StartActivityforResult,这里需要两个参数,一个是intent,一个是返回码。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=(Button)findViewById(R.id.anniu);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,touxiang.class);
                startActivityForResult(intent,0x11);
            }
        });

    }

然后还要重写OnActivityResult方法,当发出的返回码与收到的返回码相同时,获取要调用Activity的bundle,引用xml1中的ImageView(因为bundle里面的内容是ImageView类型,如果是text类型就换成TextView),新建一个int类型的变量,用来存放另一个Activity返回的图片,键值为“image”(这是另一个Activity定义的,这里省略了Bundle bundle=data.getextras()这个操作,对这个ImageView设置资源文件为该int变量,MainActivity里面的操作就完成了。

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==0x11 && resultCode==0x11){
            int ID=data.getExtras().getInt("image");
            ImageView imageView=(ImageView)findViewById(R.id.kuang);
            imageView.setImageResource(ID);
        }
    }

转到要打开的Activity,该类继承自Activity,先新建一个int数组储存图片,首先是GridView的操作。在重写OnCreat方法设置布局文件为xml1,导入xml1中的GridView组件,创建List对象,方法为ArrayList,在循环中创建Map对象,方法为HashMap,map有两个参数,分别为关键字和图片文件,用put方法添加到map,用add方法添加到list,之后便是适配器的操作。新建SimpleAdapter,有四个参数,第一个是上下文对象this,第二个是list对象,第三个是layout文件,就是xml2,第四个是map的关键字,第五个是放置每个图片的ImageView,注意适配器是对所有对象进行操作的,所以第四第五都是数组类型

public class touxiang extends Activity {
    private int[] picture=new int[]{R.drawable.h1,R.drawable.h2,R.drawable.h5};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.wangge);
        GridView gridView=(GridView)findViewById(R.id.wangge);
        List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
        for(int i=0;i<picture.length;i++) {
            Map<String, Object> map = new HashMap<>();
            map.put("image", picture[i]);
            list.add(map);
        }
        SimpleAdapter simpleAdapter=new SimpleAdapter(this,list,R.layout.cell,new String[]{"image"},new int[]{R.id.image1});
        gridView.setAdapter(simpleAdapter);
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent=getIntent();
                Bundle bundle=new Bundle();
                bundle.putInt("image",picture[position]);
                intent.putExtras(bundle);
                setResult(0x11,intent);
                finish();
            }
        });

    }

}

运行结果

初始页面

Android点击头像显示消息 android 头像_Android点击头像显示消息


点击按钮

Android点击头像显示消息 android 头像_xml_02


选择一个

Android点击头像显示消息 android 头像_android_03


因为是学习,随手截图就用来当素材了,虽然功能实现了,但是就很丑哈哈