Android利用GridView加载九宫格菜单

简介: 效果图如下:第一步:布局main.xml文件,这里使用了一个GridView和一个滚动文本控件 第二步:编写SYIT_Index.

效果图如下:


第一步:布局main.xml文件,这里使用了一个GridView和一个滚动文本控件


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/backsmall"
    android:orientation="vertical" >
    <GridView
        android:id="@+id/GridView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:columnWidth="90dip"
        android:gravity="center"
        android:horizontalSpacing="10dip"
        android:numColumns="3"
        android:verticalSpacing="10dip" >
    </GridView>


<cn.superyouth.www.itools.MarqueeText
    android:id="@+id/textMsg" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"        
    android:layout_marginTop="115dp"         
    android:textColor="@android:color/black" 
    android:lines="1"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:scrollHorizontally="true"  
    android:marqueeRepeatLimit="marquee_forever"  
    android:ellipsize="marquee" 
    />


</LinearLayout>



第二步:编写SYIT_Index.java文件,继承自Activity类


package cn.superyouth.www;


import java.io.IOException;
import java.util.ArrayList;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


import cn.superyouth.www.SYIT_SSJC.ReadHttpGet;
import cn.superyouth.www.itools.MarqueeText;
import cn.superyouth.www.itools.MenuItem;
import cn.superyouth.www.itools.Tools_AppAdapter;


import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ComponentName;
import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;


public class SYIT_Index extends Activity {
	MarqueeText autoScrollTextView;
	StringBuilder builder = new StringBuilder();
	public static String WARN_MSG = "";
	private TextView text = null;
	boolean isError = false;


	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);


		GridView gridview = (GridView) findViewById(R.id.GridView);

		// 添加菜单
		ArrayList<MenuItem> map = new ArrayList<MenuItem>();
		for (int i = 1; i < 10; i++) {
			if (i == 1) {
				MenuItem item = new MenuItem();
				item.title = "实时监测";
				item.iconId = R.drawable.m1;
				map.add(item);
			}
			if (i == 3) {
				MenuItem item = new MenuItem();
				item.title = "预警信息";
				item.iconId = R.drawable.m2;
				map.add(item);
			}
			if (i == 2) {
				MenuItem item = new MenuItem();
				item.title = "视频监控";
				item.iconId = R.drawable.m3;
				map.add(item);
			}
			if (i == 4) {
				MenuItem item = new MenuItem();
				item.title = "统计查询";
				item.iconId = R.drawable.m4;
				map.add(item);
			}
			if (i == 5) {
				MenuItem item = new MenuItem();
				item.title = "灾情上报";
				item.iconId = R.drawable.m5;
				map.add(item);
			}
			if (i == 6) {
				MenuItem item = new MenuItem();
				item.title = "卫星云图";
				item.iconId = R.drawable.m6;
				map.add(item);
			}
			if (i == 7) {
				MenuItem item = new MenuItem();
				item.title = "在线帮助";
				item.iconId = R.drawable.m7;
				map.add(item);
			}
			if (i == 8) {
				MenuItem item = new MenuItem();
				item.title = "气象雷达";
				item.iconId = R.drawable.m8;
				map.add(item);
			}
			if (i == 9) {
				MenuItem item = new MenuItem();
				item.title = "关于我们";
				item.iconId = R.drawable.m9;
				map.add(item);
			}
		}


		Tools_AppAdapter adapter = new Tools_AppAdapter(this, map,
				R.layout.item, new String[] { "ItemImage", "ItemText" },
				new int[] { R.id.ItemImage, R.id.ItemText }); // 对应R的Id


		gridview.setAdapter(adapter);

		// 添加点击事件
		gridview.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				MenuItem item = (MenuItem) arg0.getItemAtPosition(arg2);
				// Toast用于向用户显示一些帮助/提示


				if (item.title.equals("实时监测")) {
					Intent intent = new Intent();
					intent.setClass(SYIT_Index.this, SYIT_SSJC.class);
					startActivity(intent);
				}
				if (item.title.equals("预警信息")) {
					Intent intent = new Intent();
					intent.setClass(SYIT_Index.this, SYIT_Warning.class);
					startActivity(intent);
				}
				if (item.title.equals("视频监控")) {
					Intent intent = new Intent(Intent.ACTION_MAIN);
					intent.addCategory(Intent.CATEGORY_LAUNCHER);
					// 上面ComponentName有两个参数 第一个参数 :包名 第二个参数:类的命名
					ComponentName comp = new ComponentName(
							"com.mm.android.direct.gdmssphoneLite",
							"com.mm.android.direct.gdmssphoneLite.SplashActivity");
					intent.setComponent(comp);
					intent.setAction("android.intent.action.VIEW");
					startActivity(intent);
				}
				if (item.title.equals("统计查询")) {
					Intent intent = new Intent();
					intent.setClass(SYIT_Index.this, SYIT_TJCX.class);
					startActivity(intent);
				}
				if (item.title.equals("灾情上报")) {
					Intent intent = new Intent();
					intent.setClass(SYIT_Index.this, SYIT_PictureUpload.class);
					startActivity(intent);
				}
				if (item.title.equals("卫星云图")) {
					Intent intent = new Intent();
					intent.setClass(SYIT_Index.this,
							SYIT_SatelliteCloudChart.class);
					startActivity(intent);
				}
				if (item.title.equals("在线帮助")) {
					Intent intent = new Intent();
					intent.setClass(SYIT_Index.this, SYIT_OnlineHelp.class);
					startActivity(intent);
				}
				if (item.title.equals("气象雷达")) {
					Intent intent = new Intent();
					intent.setClass(SYIT_Index.this, SYIT_WeatherRadar.class);
					startActivity(intent);
				}
				if (item.title.equals("关于我们")) {
					Intent intent = new Intent();
					intent.setClass(SYIT_Index.this, SYIT_AboutUs.class);
					startActivity(intent);
				}
			}


		});


		// 开启线程
		new Thread() {
			@Override
			public void run() {
				try {

				} catch (Exception e) {
					isError = true;
					System.out.println(e.toString());
				}
				handler.sendEmptyMessage(0);


			}
		}.start();

		autoScrollTextView = (MarqueeText) findViewById(R.id.textMsg);
		autoScrollTextView.setTextSize(30);
		
		// 点击预警提示信息,进入预警信息页面
		autoScrollTextView.setOnClickListener(new OnClickListener() {
			public void onClick(View arg0) {
				// 进入预警信息页面
				Intent intent = new Intent(SYIT_Index.this, SYIT_Warning.class);
				startActivity(intent);
			}
		});
	}


	/**
	 * 用Handler来更新UI
	 */
	private Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			if (isError) {
				// 创建提示
				Dialog alertDialog = new AlertDialog.Builder(SYIT_Index.this)
						.setTitle("提示").setMessage("服务器无响应,请稍候再试!")
						.setIcon(R.drawable.ic_launcher).create();
				alertDialog.show();
			} else {
				// 获取预警信息
				new ReadHttpGet3()
						.execute("http://61.190.32.10/CityLowerRoadSys/ashx/yjxx.ashx");
			}
		}
	};


	@SuppressLint("Override")
	class ReadHttpGet3 extends AsyncTask<Object, Object, Object> {
		@Override
		protected Object doInBackground(Object... params) {
			HttpGet httpRequest = new HttpGet(params[0].toString());
			try {
				HttpClient httpClient = new DefaultHttpClient();
				HttpResponse httpResponse = httpClient.execute(httpRequest);
				if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
					String strResult = EntityUtils.toString(httpResponse
							.getEntity());
					return strResult;
				} else {
					return "请求出错";
				}
			} catch (ClientProtocolException e) {
			} catch (IOException e) {
				e.printStackTrace();
			}
			return null;
		}


		protected void onCancelled(Object result) {
			super.onCancelled();
		}


		@SuppressLint("Override")
		@Override
		protected void onPostExecute(Object result) {
			super.onPostExecute(result);
			try {
				// 创建一个JSON对象
				JSONObject jsonObject = new JSONObject(result.toString())
						.getJSONObject("parent");
				// 获取某个对象的JSON数组
				JSONArray jsonArray = jsonObject.getJSONArray("children");


				for (int i = 0; i < jsonArray.length(); i++) {
					// 新建一个JSON对象,该对象是某个数组里的其中一个对象
					JSONObject jsonObject2 = (JSONObject) jsonArray.opt(i);
					builder.append(jsonObject2.getString("name") + " ");
					WARN_MSG += jsonObject2.getString("name") + " ";
				}
				System.out.println(builder.toString());
				if (builder.toString().length() == 0) {
					autoScrollTextView.setTextColor(Color.BLUE);
					autoScrollTextView.setText("暂无任何预警信息!");
				} else {
					autoScrollTextView.setTextColor(Color.RED);
					autoScrollTextView.setText(builder.toString());
				}


			} catch (JSONException e) {
				e.printStackTrace();
			}
		}


		protected void onPreExecute() {
			// Toast.makeText(getApplicationContext(),
			// "开始HTTP GET请求",Toast.LENGTH_LONG).show();
		}


		protected void onProgressUpdate(Object... values) {
			super.onProgressUpdate(values);
		}
	}
}


===========================================================================

如果觉得对您有帮助,微信扫一扫支持一下:


相关文章
|
2月前
|
XML API Android开发
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
本文介绍了如何使用androidx.preference库快速创建具有一级和二级菜单的Android设置界面的步骤和示例代码。
56 1
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
|
3月前
|
Java Android开发
Android面试题经典之Glide取消加载以及线程池优化
Glide通过生命周期管理在`onStop`时暂停请求,`onDestroy`时取消请求,减少资源浪费。在`EngineJob`和`DecodeJob`中使用`cancel`方法标记任务并中断数据获取。当网络请求被取消时,`HttpUrlFetcher`的`cancel`方法设置标志,之后的数据获取会返回`null`,中断加载流程。Glide还使用定制的线程池,如AnimationExecutor、diskCacheExecutor、sourceExecutor和newUnlimitedSourceExecutor,其中某些禁止网络访问,并根据CPU核心数动态调整线程数。
100 2
|
4月前
|
XML Java Android开发
34. 【Android教程】菜单:Menu
34. 【Android教程】菜单:Menu
79 2
|
4月前
|
开发工具 Android开发 开发者
Android Studio中两个让初学者崩溃菜单
Android Studio中两个让初学者崩溃菜单
49 0
|
5月前
|
Android开发
Android 分享机顶盒项目的封装类《GridView》(二)(转)
Android 分享机顶盒项目的封装类《GridView》(二)(转)
43 2
|
2月前
|
API Android开发
Android使用AlertDialog实现弹出菜单
本文分享了在Android开发中使用AlertDialog实现弹出菜单的方法,并通过代码示例和错误处理,展示了如何避免因资源ID找不到导致的crash问题。
38 1
|
2月前
|
存储 缓存 Java
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
35 0
|
2月前
|
Java Android开发 Kotlin
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
26 0
|
4月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
52 2
|
4月前
|
XML API 开发工具
Android Bitmap 加载与像素操作
Android Bitmap 加载与像素操作
39 2