Android APP 开发技术阶段总结

最近在做Android APP的开发,对用到的开发技术做一个总结。

大量结构化数据的展示:

可以使用RecyclerViewadaper实现。
结构化数据可以用一个类封装起来,作为构造构造adapter的数据来源。

public class RecyclerViewDepartmentAdapter  extends RecyclerView.Adapter<RecyclerViewDepartmentAdapter.ViewHolder> {
    private Context context;
    private List<Department> data;

    public RecyclerViewDepartmentAdapter(Context context,List<Department> data){
        this.context = context;
        this.data = data;
    }

    @Override
    public RecyclerViewDepartmentAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        RecyclerViewDepartmentAdapter.ViewHolder holder = new RecyclerViewDepartmentAdapter.ViewHolder(LayoutInflater.from(
                context).inflate(R.layout.item_layout_department, parent,
                false));
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerViewDepartmentAdapter.ViewHolder holder, final int position) {

        final Context context = this.context;

        holder.id.setText(data.get(position).getId());
        holder.department.setText(data.get(position).getDepartmentName());

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("gwj","这里是点击每一行item的响应事件" + position + "item");
            }
        });
    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder{

        private TextView id;
        private TextView department;

        public ViewHolder(View itemView) {
            super(itemView);
            id = itemView.findViewById(R.id.id);
            department = itemView.findViewById(R.id.department);
        }
    }
}

如上面代码所示,构造函数传入的数据是封装好的类的list。
可以对每一行的点击进行相应。

弹出式菜单

PopupMenu popup = new PopupMenu(context, v);//第二个参数是绑定的那个view
//获取菜单填充器
MenuInflater inflater = popup.getMenuInflater();
//填充菜单
inflater.inflate(R.menu.menu_department, popup.getMenu());
//绑定菜单项的点击事件
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
	@Override
	public boolean onMenuItemClick(MenuItem item) {
		return false
	}
});

菜单需要事先在xml中定义

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/add_department"
        android:title="增加条目"/>
    <item android:id="@+id/del_department"
        android:title="删除条目"/>
</menu>

简单对话框

//弹出对话框,消息框,确认是否删除
final AlertDialog.Builder normalDialog =
		new AlertDialog.Builder(context);
//normalDialog.setIcon(R.drawable.icon_dialog);
normalDialog.setTitle("是否确定删除该部门?");
normalDialog.setMessage("确认:删除,取消:不执行任何操作");
normalDialog.setPositiveButton("确定",
		new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Log.e("ggg","删除了一个条目!");
			}
		});
normalDialog.setNegativeButton("取消",
		new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Log.e("ggg","没有执行删除操作!");
			}
		});
// 显示
normalDialog.show();

自定义对话框

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="match_parent">

    <LinearLayout
        android:layout_width="300dp"
        android:layout_height="600dp"
        android:layout_centerInParent="true"
        android:background="#44ffff"
        android:orientation="vertical">
        <!--用户名-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/person_name_label"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:text="用户名:"
                android:textColor="#000000"
                android:textSize="20dp" />

            <EditText
                android:id="@+id/person_name_edit"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:textColor="#CD3700"
                android:textSize="20dp" />
        </LinearLayout>

        <!--手机-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/person_phone_label"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:text="手机号:"
                android:textColor="#000000"
                android:textSize="20dp" />

            <EditText
                android:id="@+id/person_phone_edit"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:textColor="#CD3700"
                android:textSize="20dp" />
        </LinearLayout>

        <!--邮箱-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/person_email_label"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:text="邮箱号:"
                android:textColor="#000000"
                android:textSize="20dp" />

            <EditText
                android:id="@+id/person_email_edit"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:textColor="#CD3700"
                android:textSize="20dp" />
        </LinearLayout>

        <!--权限-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/person_permission_label"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:text="权限:"
                android:textColor="#000000"
                android:textSize="20dp" />

            <Spinner
                android:id="@+id/person_permission_spinner"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="@color/white"
                android:layout_marginTop="5dp"
                android:textAlignment="gravity"
                />
        </LinearLayout>

        <!--部门-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/person_department_label"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:text="部门名称:"
                android:textColor="#000000"
                android:textSize="20dp" />

            <Spinner
                android:id="@+id/person_department_spinner"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:background="@color/white"
                android:textAlignment="gravity"
                />
        </LinearLayout>

        <!--密码-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/person_password_label"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:text="密码:"
                android:textColor="#000000"
                android:textSize="20dp" />

            <EditText
                android:id="@+id/person_password_edit"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:textColor="#CD3700"
                android:textSize="20dp" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <Button
            android:id="@+id/button_confirm"
            android:layout_width="@dimen/dp_150"
            android:layout_height="wrap_content"
            android:text="确认" />

            <Button
                android:id="@+id/button_cancle"
                android:layout_width="@dimen/dp_150"
                android:layout_height="wrap_content"
                android:text="取消" />

        </LinearLayout>

    </LinearLayout>
</RelativeLayout>

对话框样式

<style name="MyDialog" parent="android:Theme.Dialog">
	<!-- 背景颜色及透明程度 -->
	<item name="android:windowBackground">@android:color/transparent</item>
	<!-- 是否半透明 -->
	<item name="android:windowIsTranslucent">false</item>
	<!-- 是否没有标题 -->
	<item name="android:windowNoTitle">true</item>
	<!-- 是否浮现在activity之上 -->
	<item name="android:windowIsFloating">true</item>
	<!-- 是否背景模糊 -->
	<item name="android:backgroundDimEnabled">false</item>
	<!-- 设置背景模糊的透明度-->
	<item name="android:backgroundDimAmount">0.5</item>
</style>

类实现

public class PersonDialog  extends Dialog{
    //在构造方法里提前加载了样式
    private Context context;//上下文
    private Button button_confirm;
    private Button button_cancle;
    private Person person;

    public EditText editText_name;
    public EditText editText_phone;
    public EditText editText_email;
    public EditText editText_password;

    public Spinner spinner_permission;
    public Spinner spinner_department;

    public PersonDialog(Context context, Person person){
        super(context, R.style.MyDialog);//加载dialog的样式
        this.context = context;
        this.person = person;
    }

    public interface OnDialogButtonClickListener {
        void okButtonClick();
        void cancelButtonClick();
    }

    OnDialogButtonClickListener buttonClickListner;

    public void setOnButtonClickListener(OnDialogButtonClickListener listener) {
        this.buttonClickListner = listener;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //提前设置Dialog的一些样式
        Window dialogWindow = getWindow();
        dialogWindow.setGravity(Gravity.CENTER);//设置dialog显示居中
        //dialogWindow.setWindowAnimations();设置动画效果
        setContentView(R.layout.dialog_person);


        WindowManager windowManager = ((Activity)context).getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.width = display.getWidth()*4/5;// 设置dialog宽度为屏幕的4/5
        getWindow().setAttributes(lp);
        setCanceledOnTouchOutside(true);//点击外部Dialog消失
        //遍历控件id添加点击注册

        button_confirm = findViewById(R.id.button_confirm);
        button_cancle = findViewById(R.id.button_cancle);
        button_confirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                buttonClickListner.okButtonClick();
            }
        });
        button_cancle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                buttonClickListner.cancelButtonClick();
            }
        });

        //显示控件
        editText_name = findViewById(R.id.person_name_edit);
        editText_phone = findViewById(R.id.person_phone_edit);
        editText_email = findViewById(R.id.person_email_edit);
        editText_password = findViewById(R.id.person_password_edit);

        spinner_department = findViewById(R.id.person_department_spinner);
        spinner_permission = findViewById(R.id.person_permission_spinner);

    }
}

类使用

final PersonDialog personDialog1 = new PersonDialog(context,person1);
personDialog1.setOnButtonClickListener(new PersonDialog.OnDialogButtonClickListener() {
	@Override
	public void okButtonClick() {
		personDialog1.dismiss();
	}

	@Override
	public void cancelButtonClick() {
		personDialog1.dismiss();
	}
});
personDialog1.show();

这里使用Listener,在类的外部实现按钮的相应代码。

下拉列表

spinner_department = findViewById(R.id.person_department_spinner);
final DepartmentDao departmentDao = new DepartmentDao(context);
List<Department> ld = departmentDao.getDepartments();

List<String> list1 = new ArrayList<>();
for(int i = 0;i<ld.size();i++) {
	list1.add(ld.get(i).getDepartmentName());
}


ArrayAdapter<String> adapter_department = new ArrayAdapter<String>(context,R.layout.item_gwj_register_org, R.id.text,list1);
spinner_department.setAdapter(adapter_department);

把从数据库中查询到内容显示到下拉列表中

发布了113 篇原创文章 · 获赞 132 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/iamqianrenzhan/article/details/90479269