android studio实现顶部栏有四个图片加文字按键,代表四个分类,点击相应的图片可以切换不同类别的新闻列表,顶部栏存在于每个页面中,通过点击顶部栏进行切换页面;每个页面包含三条新闻,页面显示新闻的头像、时间、标题,新闻类的属性有头像ID、时间、标题和网址,点击页面中的新闻项通过intent跳转到手机自带浏览器进行阅览,给出详细代码
时间: 2023-06-12 08:08:03 浏览: 80
这里是一个简单的实现顶部栏有四个图片加文字按键,代表四个分类,点击相应的图片可以切换不同类别的新闻列表的 Android Studio 代码示例:
1. 首先在 `res/layout` 目录下创建 `activity_main.xml` 文件,用于显示顶部栏和新闻列表。
```
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 顶部栏 -->
<RelativeLayout
android:id="@+id/top_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary">
<ImageButton
android:id="@+id/btn_category_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:background="@null"
android:src="@drawable/category1_icon" />
<ImageButton
android:id="@+id/btn_category_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/btn_category_1"
android:background="@null"
android:src="@drawable/category2_icon" />
<ImageButton
android:id="@+id/btn_category_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/btn_category_2"
android:background="@null"
android:src="@drawable/category3_icon" />
<ImageButton
android:id="@+id/btn_category_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/btn_category_3"
android:background="@null"
android:src="@drawable/category4_icon" />
</RelativeLayout>
<!-- 新闻列表 -->
<ListView
android:id="@+id/news_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/top_bar"
android:divider="@android:color/transparent"
android:dividerHeight="10dp"
android:listSelector="@android:color/transparent" />
</RelativeLayout>
```
2. 在 `res/drawable` 目录下创建四个图片资源,分别代表四个分类的图标。
3. 在 `MainActivity.java` 中实现顶部栏的点击事件和新闻列表的显示。
```
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ImageButton btnCategory1, btnCategory2, btnCategory3, btnCategory4;
private ListView newsList;
private List<News> newsData = new ArrayList<>();
private NewsAdapter newsAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化控件
btnCategory1 = findViewById(R.id.btn_category_1);
btnCategory2 = findViewById(R.id.btn_category_2);
btnCategory3 = findViewById(R.id.btn_category_3);
btnCategory4 = findViewById(R.id.btn_category_4);
newsList = findViewById(R.id.news_list);
// 设置顶部栏点击事件
btnCategory1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 切换到分类1的新闻列表
loadNewsData("category1");
}
});
btnCategory2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 切换到分类2的新闻列表
loadNewsData("category2");
}
});
btnCategory3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 切换到分类3的新闻列表
loadNewsData("category3");
}
});
btnCategory4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 切换到分类4的新闻列表
loadNewsData("category4");
}
});
// 初始化新闻列表
newsAdapter = new NewsAdapter(this, newsData);
newsList.setAdapter(newsAdapter);
newsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 跳转到浏览器查看新闻
News news = newsData.get(position);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(news.getUrl()));
startActivity(intent);
}
});
}
// 加载指定分类的新闻列表
private void loadNewsData(String category) {
// TODO: 根据分类从网络或本地加载新闻数据
// 这里只是简单地模拟数据
newsData.clear();
for (int i = 0; i < 3; i++) {
News news = new News();
news.setAvatarId(R.drawable.news_avatar);
news.setTime("2022-01-01");
news.setTitle("新闻标题" + i);
news.setUrl("http://www.example.com/news" + i + ".html");
newsData.add(news);
}
newsAdapter.notifyDataSetChanged();
}
}
```
4. 在 `News.java` 中定义新闻类。
```
public class News {
private int avatarId;
private String time;
private String title;
private String url;
public int getAvatarId() {
return avatarId;
}
public void setAvatarId(int avatarId) {
this.avatarId = avatarId;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
```
5. 在 `NewsAdapter.java` 中定义新闻列表的适配器。
```
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class NewsAdapter extends BaseAdapter {
private Context context;
private List<News> newsList;
public NewsAdapter(Context context, List<News> newsList) {
this.context = context;
this.newsList = newsList;
}
@Override
public int getCount() {
return newsList.size();
}
@Override
public Object getItem(int position) {
return newsList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_news, parent, false);
viewHolder = new ViewHolder();
viewHolder.avatarView = convertView.findViewById(R.id.news_avatar);
viewHolder.timeView = convertView.findViewById(R.id.news_time);
viewHolder.titleView = convertView.findViewById(R.id.news_title);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
News news = newsList.get(position);
viewHolder.avatarView.setImageResource(news.getAvatarId());
viewHolder.timeView.setText(news.getTime());
viewHolder.titleView.setText(news.getTitle());
return convertView;
}
private static class ViewHolder {
ImageView avatarView;
TextView timeView;
TextView titleView;
}
}
```
6. 在 `res/layout` 目录下创建 `item_news.xml` 文件,定义新闻列表项的布局。
```
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
<ImageView
android:id="@+id/news_avatar"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_alignParentLeft="true"
android:src="@drawable/news_avatar" />
<TextView
android:id="@+id/news_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/news_avatar"
android:layout_marginLeft="10dp"
android:textColor="#888888"
android:textSize="12sp"
android:text="2022-01-01" />
<TextView
android:id="@+id/news_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/news_avatar"
android:layout_below="@id/news_time"
android:layout_marginLeft="10dp"
android:textSize="16sp"
android:text="新闻标题" />
</RelativeLayout>
```
这样就完成了一个简单的实现顶部栏有四个图片加文字按键,代表四个分类,点击相应的图片可以切换不同类别的新闻列表的 Android Studio 代码示例。