写一个android studio 程序,java语音,布局设有按钮和图像,点击按钮使用startActivityForResult方法不使用startActivityForResult(),可以跳转到Gridview页面选取头像后返回主界面更换头像
时间: 2024-01-09 11:52:28 浏览: 84
好的,你想知道如何编写一个 Android Studio 程序,其中布局包含按钮和图像,并且可以通过 Gridview 页面更换头像,是吗?我可以为你提供一些指导。
首先,你需要在 Android Studio 中创建一个新的项目,然后创建一个布局文件来设计你的主界面。在这个布局文件中,你可以添加一个按钮和一个图像控件,如下所示:
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_change_avatar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更换头像"
android:layout_centerInParent="true"/>
<ImageView
android:id="@+id/img_avatar"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_below="@+id/btn_change_avatar"
android:layout_centerHorizontal="true"
android:src="@drawable/default_avatar"/>
</RelativeLayout>
```
在这个布局文件中,我们将按钮和头像控件放在一个相对布局中,按钮居中显示,头像控件在按钮下方并水平居中。头像控件使用了一个名为 default_avatar 的图片作为默认的头像。
然后,你需要在 MainActivity.java 中为按钮添加一个点击事件处理程序,以便在点击按钮时打开 Gridview 页面,让用户选择一个新的头像。你可以使用 startActivityForResult 方法来启动 Gridview 页面,并等待返回结果:
```java
public class MainActivity extends AppCompatActivity {
private ImageView mAvatarView;
private static final int REQUEST_CODE_AVATAR = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button changeAvatarBtn = findViewById(R.id.btn_change_avatar);
mAvatarView = findViewById(R.id.img_avatar);
changeAvatarBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, AvatarActivity.class);
startActivityForResult(intent, REQUEST_CODE_AVATAR);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_AVATAR && resultCode == RESULT_OK) {
int avatarId = data.getIntExtra(AvatarActivity.RESULT_AVATAR_ID, R.drawable.default_avatar);
mAvatarView.setImageResource(avatarId);
}
}
}
```
在这个代码中,我们为按钮添加了一个点击事件处理程序。当用户点击按钮时,我们创建了一个 Intent 对象,并使用 startActivityForResult 方法启动了一个名为 AvatarActivity 的新活动。我们还定义了一个请求代码 REQUEST_CODE_AVATAR,以便在 onActivityResult 方法中检查返回的结果。这里我们传递了这个请求代码作为 startActivityForResult 的第二个参数。
当用户完成选择头像并返回到主界面后,onActivityResult 方法将被调用,并检查返回的请求代码和结果代码。如果请求代码为 REQUEST_CODE_AVATAR,结果代码为 RESULT_OK,那么我们可以从返回的 Intent 对象中获取所选的头像 ID,并将它设置为 ImageView 的源图片。
最后,你需要创建一个新的活动 AvatarActivity,用于显示 Gridview 页面并让用户选择头像。这里我们可以使用一个名为 AvatarAdapter 的适配器类,用于加载头像图片列表,并将它们显示在 Gridview 中:
```java
public class AvatarActivity extends AppCompatActivity {
public static final String RESULT_AVATAR_ID = "result_avatar_id";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_avatar);
GridView gridView = findViewById(R.id.grid_view);
gridView.setAdapter(new AvatarAdapter(this));
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent();
intent.putExtra(RESULT_AVATAR_ID, AvatarAdapter.mAvatarIds[position]);
setResult(RESULT_OK, intent);
finish();
}
});
}
private static class AvatarAdapter extends BaseAdapter {
private Context mContext;
private static final int[] mAvatarIds = {R.drawable.avatar1, R.drawable.avatar2, R.drawable.avatar3, R.drawable.avatar4, R.drawable.avatar5, R.drawable.avatar6};
public AvatarAdapter(Context context) {
mContext = context;
}
@Override
public int getCount() {
return mAvatarIds.length;
}
@Override
public Object getItem(int position) {
return mAvatarIds[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(350, 350));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mAvatarIds[position]);
return imageView;
}
}
}
```
在这个代码中,我们定义了一个名为 AvatarActivity 的活动,它通过 setContentView 方法加载了一个名为 activity_avatar 的布局文件。在这个布局文件中,我们放置了一个 GridView 控件,并将其适配器设置为 AvatarAdapter 类的新实例。
AvatarAdapter 类是一个简单的适配器类,它加载了一个头像 ID 列表,并在 getView 方法中将每个头像 ID 显示为一个 ImageView 控件。如果 convertView 参数为 null,则我们新创建一个 ImageView 控件;否则,我们重用 convertView 参数。这样做可以提高 GridView 的性能。
当用户点击 GridView 中的某个头像时,我们创建了一个包含所选头像 ID 的新 Intent 对象,并设置了结果代码 RESULT_OK。然后,我们通过调用 setResult 方法,将 Intent 对象返回给主界面,并调用 finish 方法关闭 AvatarActivity 活动。这样,在 MainActivity 中,我们就可以在 onActivityResult 方法中获取所选的头像 ID,将其设置为 ImageView 的源图片。
希望这些指导对你有所帮助!如果你还有其他问题或需求,请随时问我。
阅读全文