自定义界面按钮有无
1.界面布局:使用网格布局,事先定义按钮,并设置在布局中的位置(适合少量按钮组件自定义情况,手法非正规)(由后台获取添加按钮情况,依照该数据添加到GradView里)
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical"
android:fadingEdge="vertical"
android:background="@drawable/gray">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1"
>
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/bs03"
android:adjustViewBounds="true"
android:maxWidth="500dip"
android:maxHeight="500dip"
/>
<!--动态生成部分-->
<!--将其改为网格布局-->
<GridLayout
android:paddingTop="25dip"
android:paddingLeft="21dip"
android:id="@+id/gridLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:rowCount="4"
android:columnCount="2"
>
<ImageButton
android:id="@+id/nsrfx"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/nsrfx2"
android:layout_columnSpan="1"/>
<ImageButton
android:id="@+id/ssfx"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ssfx2"
android:layout_columnSpan="1"/>
<ImageButton
android:id="@+id/szrdfx"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/szrdfx2"
android:layout_columnSpan="1"
/>
<ImageButton
android:id="@+id/tj"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tj2"
android:layout_columnSpan="1"
/>
<!--之前使用的表格布局-->
<!--
<TableRow android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingTop="20dip">
<ImageButton android:id="@+id/jmskfx"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/jmskfx2" />
<ImageButton android:id="@+id/qsskfx"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/qsskfx2" /> </TableRow>
<TableRow android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingTop="20dip">
<ImageButton android:id="@+id/nsrjbxx"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/nsrjbxx2" />
</TableRow> --> </GridLayout>
<!--动态生成部分结束-->
</LinearLayout>
</LinearLayout>
</ScrollView>
2.java后台请求添加情况:(绿色为请求服务器部分,粉色为得到返回数据后添加按钮、及所有按钮及其位置定义,棕色为刷新更改后的主界面)
(之前采取的办法为添加activity传值给主activity,更改为向服务器求值,
更简洁代码更少,以流量换复杂度**********访问失败情况需考虑bug)
package com.example.administrator.bs01;
import android.app.AlertDialog;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.view.MenuItem;
import android.widget.GridLayout;
import android.widget.ImageButton;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.Button;
import com.example.administrator.bs01.domain.User;
import com.example.administrator.bs01.util.DialogUtil;
import com.example.administrator.bs01.util.HttpUtil;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends ActionBarActivity {
ImageButton nsrfx,ssfx,szrdfx,tj,jmskfx,qsskfx,nsrjbxx,button1;
GridLayout gridLayout1;
int function;
String username = null;
int x1=2,x2=2,x3=3,y1=0,y2=1,y3=0;
//设置网格布局中各个按钮的位置
GridLayout.Spec rowSpec1=GridLayout.spec(x1);
GridLayout.Spec columnSpec1=GridLayout.spec(y1);
GridLayout.LayoutParams BT1 = new GridLayout.LayoutParams(rowSpec1,columnSpec1);//即第三行第一列
// gridLayout1.addView(nsrjbxx,BT1);
GridLayout.Spec rowSpec2=GridLayout.spec(x2);
GridLayout.Spec columnSpec2=GridLayout.spec(y2);
GridLayout.LayoutParams BT2 = new GridLayout.LayoutParams(rowSpec2,columnSpec2);
GridLayout.Spec rowSpec3=GridLayout.spec(x3);
GridLayout.Spec columnSpec3=GridLayout.spec(y3);
GridLayout.LayoutParams BT3 = new GridLayout.LayoutParams(rowSpec3,columnSpec3);
/**
* 刷新, 这种刷新方法,只有一个Activity实例。
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
//获取由Intent传递的Bundle携带内容
User u=(User) intent.getSerializableExtra("user");
username = u.getUsername();
initView();
}
/**
* 初始化页面元素
*/
private void initView(){
nsrfx=(ImageButton)findViewById(R.id.nsrfx);
ssfx=(ImageButton)findViewById(R.id.ssfx);
szrdfx=(ImageButton)findViewById(R.id.szrdfx);
tj=(ImageButton)findViewById(R.id.tj);
gridLayout1=(GridLayout)findViewById(R.id.gridLayout1);
nsrjbxx=new ImageButton(this);
qsskfx=new ImageButton(this);
jmskfx=new ImageButton(this);
function = query(username);
addButton(function);
//提示窗
// String str="mmmmmm"+function;
// new AlertDialog.Builder(MainActivity.this).setTitle("????").setMessage(str).show();
tj.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle data = new Bundle();
data.putSerializable("username", username);
//转到添加部分
Intent intent = new Intent(MainActivity.this, tjActivity.class);
intent.putExtras(data);
startActivity(intent);
// startActivityForResult(intent, 0);
}
});
nsrfx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//转到纳税人分析
Intent intent=new Intent(MainActivity.this,nsrfxActivity.class);
startActivity(intent);
}
});
ssfx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//转到税收分析
Intent intent = new Intent(MainActivity.this, ssfxActivity.class);
startActivity(intent);
}
});
szrdfx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//转到税种认定分析
Intent intent=new Intent(MainActivity.this,szrdfxActivity.class);
startActivity(intent);
}
});
nsrjbxx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//转到纳税人基本信息
Intent intent=new Intent(MainActivity.this,nsrjbxxActivity.class);
startActivity(intent);
}
});
jmskfx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//转到减免税款分析
Intent intent=new Intent(MainActivity.this,jmskfxActivity.class);
startActivity(intent);
}
});
qsskfx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//转到欠税税款分析
Intent intent=new Intent(MainActivity.this,qsskfxActivity.class);
startActivity(intent);
}
});
}
/**
* 调用onCreate(), 目的是刷新数据,
* 从另一activity界面返回到该activity界面时, 此方法自动调用
*/
@Override
protected void onResume() {
super.onResume();
initView();//根据得到的添加情况刷新主界面
}
//请求服务器传回function情况
private int query(String username) {
int function = 1000;
try
{
//建立Map映射,存储传递信息
Map<String,String> map = new HashMap<String,String>();
map.put("username", username);
// 设置访问的URL
String url = HttpUtil.BASE_URL+ "getFunction.jsp";
// 封装为json格式
JSONObject jsonObject = new JSONObject(HttpUtil.postRequest(url, map));
//将传回的值赋给function
function = jsonObject.getInt("function");
}
catch (Exception e)
{
DialogUtil.showDialog(this
, "连接服务器异常,请稍后再试", false);
e.printStackTrace();
}
return function;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
*重写onActivityResult()获取tjActivity回传值
*/
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
// ??requestCode??resultCode??
if (requestCode == 0 && resultCode == 0) {
Bundle bundleData = intent.getExtras();
// function = function + bundleData.getInt("function");
function = bundleData.getInt("function");
addButton(function);
}
}
public void addButton(int i){
int function1000 = i;
//显示此时function情况
// String str="mmmmmm"+function1000;
// new AlertDialog.Builder(MainActivity.this).setTitle("????").setMessage(str).show();
//bug1.布局无法灵活变动
//bug2.重复添加会崩溃
if(function1000<0){
}else{
if(function1000==1100){
nsrjbxx.setImageResource(R.drawable.nsrjbxx2);
// TableRow1.addView(nsrjbxx, BT1);
// TableLayout1.addView(TableRow1, TR1);
gridLayout1.addView(nsrjbxx,BT1);
}else if(function1000==1010) {
jmskfx.setImageResource(R.drawable.jmskfx2);
// TableRow2.addView(jmskfx, BT2);
// TableLayout1.addView(TableRow2, TR2);
gridLayout1.addView(jmskfx,BT1);
}else if(function1000==1001){
qsskfx.setImageResource(R.drawable.qsskfx2);
// TableRow3.addView(qsskfx, BT3);
// TableLayout1.addView(TableRow3, TR3);
gridLayout1.addView(qsskfx,BT1);
}else if(function1000==1110) {
// y2++;
nsrjbxx.setImageResource(R.drawable.nsrjbxx2);
// TableRow1.addView(nsrjbxx, BT1);
// TableLayout1.addView(TableRow1, TR1);
gridLayout1.addView(nsrjbxx,BT1);
jmskfx.setImageResource(R.drawable.jmskfx2);
// TableRow2.addView(jmskfx, BT2);
// TableLayout1.addView(TableRow2, TR2);
gridLayout1.addView(jmskfx,BT2);
}else if(function1000==1101) {
// y3++;;
nsrjbxx.setImageResource(R.drawable.nsrjbxx2);
// TableRow1.addView(nsrjbxx, BT1);
// TableLayout1.addView(TableRow1, TR1);
gridLayout1.addView(nsrjbxx,BT1);
qsskfx.setImageResource(R.drawable.qsskfx2);
// TableRow3.addView(qsskfx, BT3);
// TableLayout1.addView(TableRow3, TR3);
gridLayout1.addView(qsskfx,BT2);
}else if(function1000==1011) {
// y3++;
jmskfx.setImageResource(R.drawable.jmskfx2);
// TableRow2.addView(jmskfx, BT2);
// TableLayout1.addView(TableRow2, TR2);
gridLayout1.addView(jmskfx,BT1);
qsskfx.setImageResource(R.drawable.qsskfx2);
// TableRow3.addView(qsskfx, BT3);
// TableLayout1.addView(TableRow3, TR3);
gridLayout1.addView(qsskfx,BT2);
}else if(function1000==1111) {
// y2++;x3++;
nsrjbxx.setImageResource(R.drawable.nsrjbxx2);
// TableRow1.addView(nsrjbxx, BT1);
// TableLayout1.addView(TableRow1, TR1);
gridLayout1.addView(nsrjbxx,BT1);
jmskfx.setImageResource(R.drawable.jmskfx2);
// TableRow2.addView(jmskfx, BT2);
// TableLayout1.addView(TableRow2, TR2);
gridLayout1.addView(jmskfx,BT2);
qsskfx.setImageResource(R.drawable.qsskfx2);
// TableRow3.addView(qsskfx, BT3);
// TableLayout1.addView(TableRow3, TR3);
gridLayout1.addView(qsskfx,BT3);
}
}
}
}
(3.关于刷新亦有其他方法比如:
如上所提点击打开链接
下拉刷新(可能此处不太合适)点击打开链接)
4.添加部分的java后台:
package com.example.administrator.bs01;
import android.app.AlertDialog;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.view.Menu;
import android.view.MenuItem;
import com.example.administrator.bs01.util.DialogUtil;
import com.example.administrator.bs01.util.HttpUtil;
import org.json.JSONObject;
import org.w3c.dom.Text;
import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Map;
public class tjActivity extends ActionBarActivity {
Button buttontj;
CheckBox checkbox1,checkbox2,checkbox3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tj);
buttontj = (Button) findViewById(R.id.buttontj);
checkbox1 = (CheckBox) findViewById(R.id.cb1);
checkbox2 = (CheckBox) findViewById(R.id.cb2);
checkbox3 = (CheckBox) findViewById(R.id.cb3);
// final Button buttontest = new Button(this);
buttontj.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// Intent intent=new Intent(tjActivity.this,MainActivity.class);
// startActivity(intent);
// Button.setVisibility(View.INVISIBLE) ;//原先采用的隐藏策略
String str = "";
String str0 = "某组件已在界面内";
int had = -10000;
int function = 1000;//
if (checkbox1.isChecked()) {
str += "纳税人基本信息";
function += 100;
}
if (checkbox2.isChecked()) {
str += "减免税款分析";
function += 10;
}
if (checkbox3.isChecked()) {
str += "欠税税款分析";
function += 1;
}
//获得用户名
Intent intent = getIntent();
String username = (String) intent.getSerializableExtra("username");
//返回的功能添加情况重复则不添加,不重复则添加
boolean result = queryAdd(username, function);
Bundle data = new Bundle();
if(function == 1000){
function = had;
}
else if (result) {
new AlertDialog.Builder(tjActivity.this).setTitle("添加").setMessage(str0).show();
function = had;
} else {
new AlertDialog.Builder(tjActivity.this).setTitle("添加").setMessage(str).show();
// .setPositiveButton("ȷ��",null)
}
data.putInt("function", function);
intent.putExtras(data);
tjActivity.this.setResult(0, intent);
new Thread() {
@Override
public void run() {
super.run();
try {
Thread.sleep(1000);//线程睡1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
/**
* Ҫִ�еIJ���
*/
tjActivity.this.finish();
}
}.start();
}
}
);
}
private boolean queryAdd(String username,int function)
{
boolean result = true;
try
{
//添加Map映射
Map<String,String> map = new HashMap<String,String>();
map.put("username", username);
map.put("function", function+"");
// 设置URL
String url = HttpUtil.BASE_URL+ "addFunction.jsp";
// 封装为json对象
JSONObject jsonObject = new JSONObject(HttpUtil.postRequest(url, map));
//获取传回的result
result=jsonObject.getBoolean("result");
//提示窗口
// String str="kkkkkkkk"+function;
// new AlertDialog.Builder(Login.this).setTitle("test").setMessage(str).show();
}
catch (Exception e)
{
DialogUtil.showDialog(this
, "连接服务器异常,请稍后再试", false);
e.printStackTrace();
}
return result;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_tj, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
5.添加界面布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginTop="10dip">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="61dip"
android:clickable="true"
android:background="@drawable/home_select_list_style">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_centerVertical="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tv01"
android:textSize="18dip"
android:textColor="@android:color/secondary_text_light"
android:textStyle="bold"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right">
<CheckBox
android:id="@+id/cb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_alignParentRight="true"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="61dip"
android:clickable="true"
android:background="@drawable/home_select_list_style">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_centerVertical="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tv02"
android:textSize="18dip"
android:textColor="@android:color/secondary_text_light"
android:textStyle="bold"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right">
<CheckBox
android:id="@+id/cb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_alignParentRight="true"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="61dip"
android:clickable="true"
android:background="@drawable/home_select_list_style">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_centerVertical="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tv03"
android:textSize="18dip"
android:textColor="@android:color/secondary_text_light"
android:textStyle="bold"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right">
<CheckBox
android:id="@+id/cb3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_alignParentRight="true"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:paddingTop="240dip">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btntj"
android:id="@+id/buttontj" />
</LinearLayout>
</LinearLayout>
(新手上路》》》》》》》》》》》》》》