版权声明:未经博主允许不得转载

在Android中我们常常用到很多UI控件,如TextViewEditTextImageViewButtonImageButtonToggleButtonCheckBoxRadioButton等等这些可以自己多用就会了。

也会学到一些布局如:LinearLayout 线性布局RelativeLayout 相对布局FrameLayout 帧布局AbsoluteLayout绝对布局TableLayout 表格布局GridLayout 网格布局ConstraintLayout 约束布局

LinearLayout 线性布局:

android:orientation="vertical"
android:orientation="horizontal"

RelativeLayout 相对布局

android:layout_alignParentTop
android:layout_alignParentBottom
android:layout_alignParentLeft
android:layout_alignParentRight
android:layout_marginTop
android:layout_marginBottom
android:layout_marginLeft
android:layout_marginRight
android:layout_margin
android:layout_centerVertical
android:layout_centerHorizontal
android:layout_centerInParent
android:layout_above
android:layout_below
android:layout_alignLeft
android:layout_alignRight
android:layout_toLeftOf
android:layout_toRightOf
android:layout_alignBottom
android:layout_alignTop
android:layout_alignBaseline

TableLayout 表格布局

android:layout_span
android:layout_column
android:collapseColumns
android:shrinkColumns
android:stretchColumns

属性

android:id
android:layout_width
android:match_parent
android:text
android:background
android:textSize
android:textColor
android:inputType
android:hint

结构:

AndroidManifest.xml为整个应用的主配置,清单文件,应用的包名、版本号、组件、权限等信息。

Activity的活动状态:

activity is running:为活动状态
onResume()->running->onPause():为暂停状态
onStart()->onResume()->running->onPause()->onStop():为停止状态
onDestroy():为非活动状态
onCreate()
onStart()
onResume()
onPause()
onStop()
onDestroy()
onRestart()

跳转:第二个界面:

private Button mButton;
private String text="dashu"; mButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent data = new Intent();
data.putExtra("text",text);
setResult(2,data);
finish();
}
}

跳转:第一个界面:

@Override
protected void onActivityResult(int requestCode,int resuleCode,Intent data){
super.onActivityResult(requestCode,resultCode,data):
if(requestCode==1&&resultCode==2){
String text = data.getStringExtra("text");
textView.setTextView(text);
}
}

ListView与ArrayAdapter的搭配:

//准备数据源->适配器加载数据源->控件加载适配器
public class MainActivity extends AppCompatActivity{
private ListView listView;
private ArrayAdapter<String> list_adpater; @Override
protected void onCreate(Bundle savedInsstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView=findViewById(R.id.listView); //1
String data[] = {"dashu1","dashu2","dashu3"};
//2
list_adpater = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,data);
//3
listView.setAdapter(list_adapter); }
}

ListView与SimpleAdapter的搭配:

//列表项
//布局
<ListView
android:id="@android:id/app_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
//单个列表项
<ImageView
android:id="@+id/icon_image_view"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/title_text_view"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="@string/app_name"
android:textSize="24sp"/>
private ListView listView;
private List<Map<String,Object>> dataList;
private SimpleAdapter simple_adapter;
//1.
dataList = new ArrayList<>();
dataList=getData();
private List<Map<String,Object>> getData(){
for(int i = 0;i<10;i++){
Map<String,Object> map = new HashMap<>();
map.put("image",R.drawable.images1);
map.put("text",i);
dataList.add(map);
}
return dataList;
}
//2.
simple_adapter = new SimpleAdapter(this,dataList,R.layout.item,new String[]{"image","text"},new int[]{"R.id.imageView","R.id.imageView"});
//3.
listView.setAdapter(simple_adapter);

To:

public class App{
private String appName;
private int appId;
App(String appName,int appId){
}
}
//
public class AppAdapter extentds ArrayAdapter<App>{
...
App app = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(...);
}
//
//获取视图
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//创建ViewHolder
ViewHolder viewHolder = null;
//如果为空
if (convertView == null){
//mInflater.inflate(渲染布局,parent , false)
convertView = mInflater.inflate(R.layout.item_msg,parent,false);
viewHolder = new ViewHolder();//创建类对象
//视图
viewHolder.mIvImg = convertView.findViewById(R.id.id_iv_img);
viewHolder.mTvTitle = convertView.findViewById(R.id.id_tv_title);
viewHolder.mTvContent = convertView.findViewById(R.id.id_tv_content); convertView.setTag(viewHolder);// convertView.getTag(); }else {
viewHolder = (ViewHolder) convertView.getTag();// convertView.getTag();
}
//获取数据位置
Message msg = mDatas.get(position);//数据集合 private List<Message> mDatas;
viewHolder.mIvImg.setImageResource(msg.getImgResId());//获取图片位置
viewHolder.mTvTitle.setText(msg.getTitle());//获取标题
viewHolder.mTvContent.setText(msg.getContent());//获取内容 return convertView;
} public static class ViewHolder{
//静态内部类,类调用
ImageView mIvImg;
TextView mTvTitle;
TextView mTvContent;
}
//or
App app = getItem(position);
if(convertView==null){
view=LayoutInflater.from(getContext()).inflate(resourceId, null);
viewHolder=new ViewHolder();
viewHolder.imageView= view.findViewById(R.id.app_image);
viewHolder.textView= view.findViewById(R.id.appl_name);
view.setTag(viewHolder);
}else{
view=convertView;
viewHolder = (ViewHolder) view.getTag();
...
return view;
}

To:

private List<Map<String,Object>> dataList;
private SimpleAdapter simpleAdapter;
private void getData(){
for(int i=0;i<##;i++){
Map<String,Object> map = new HashMap<>();
map.put("",##);
dataList.add(##);
}
}

ProgressBarmax,progress,secondaryProgress

style="?android:attr/progressBarStyleHorizontal"
style="?android:attr/progressBarStyleLarge"
style="?android:attr/progressBarStyle"
style="?android:attr/progressBarStyleSamll"
int first=progressBar.getProgress();
int second=progressBar.getSecondaryProgress();
int max = progress.getMax();
progressBar.incrementProgressBy(5);
progressBar.incrementSecondaryProgressBy(5); progress.incrementProgressBy(-5);
progressBar.incrementSecondaryProgressBy(-5);
ProgressDialog progressDialog = new ProgressDialog(this);
//
progressDialog.setProgresssStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setTitle("");
progressDialog.setIcon("");
//
progressDialog.setMax(100);
progressDialog.incrementProgressBy(20);
//
progessDialog.setButton(DialogInterface.BUTTON_POSITIVE,"确定",new DialogInterface.OnClickListener(){
...
});
progressDialog.setCancelable(true);
//
progressDialog.show();

SeekBarOnSeekBarChangeListener

<SeekBar>
...
android:max="100"
android:progress="40"
</SeekBar>
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){

});

日历选择器:OnDateChangedListener

//DataPicker日历选择器
private DataPicker dataPicker;
private Calendar calendar;
private int year,day,hour,minute;
//
calendar = Calendar.getInstance();
//
year = calendar.get(Calendar.YEAR);
...
minute = calendar.get(Calendar.MINUTE); //DataPickerDialog-OnDateSetListener()
new DatePickerDialog(this, newDatePickerDialog.OnDateSetListener(){
...
},year,calendar.get(Calendar.MONTH),day).show();
//TimePicker-setOnTimeChangedListener()
//TimePickerDialog-OnTimeSetListener
new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener(){
....
},hour,minute,true).show();

Meau

//OptionsMenu,SubMenu,ContextMenu
//
<menu>
<item android:id="@+id/item1"
android:title="1"
</item>
<item android:id="@+id/item12"
android:title="12"
</item>
//
<item android:id="@+id/play" android:title="玩">
<menu>
<item android:id="" android:title="下棋"/>
<item .../>
</menu>
</item>
//
雷同SubMenu
//
getMenuInflater().inflate();
onCreateOptionsMenu();
onCreateContextMenu();
//动态
onCreateOptionsMenu(Menu menu){
menu.add(1,1,1,"1");
menu.add(1,2,1,"2");
return super.onCreateOptionsMenu(menu);
}
onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo){
//menu.setHeaderTitle();
//menu.setHeaderIcon();
menu.add(1,1,1,"1");
menu.add(1,2,1,"2");
...
super.onCreateContextMenu(menu,v,menuInfo);
}
//
onCreateOptionsMenu(Menu menu){
//SubMenu play=menu.addSubMenu();
play.setHeaderTitle();
play.setHeaderIcon();
play.add();
play.add();
SubMenu play2=menu.addSubMenu();
paly2.add(2,1,1,"");
play2.add(2,2,1,"");
return super.onCreateOptionsMenu(menu);
}
//
ContextMenu
ListView = findViewById(R.id.listView);
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
listView.setAdapter(adapter);
registerForContextMenu(listView); //OnOptionsItemSelected
OnOptionsItemSelected(MenuItem item){
if(item.getGroupId() == 1){
switch(item.getItemId()){
case 1:
break;
case 2:
break;
}
}
...
}

Notification 通知

图标(SmallIcon)
标题(ContextTitle)
内容(ContextText)
时间(When)
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
//
builder.setSmallIcon();
...
builder.setDefaults(Notification.DEFAULT_ALL);
//
PendingIntent类-setContentIntent()
NotificationManager去完成发送和取消通知的事情

Dialog 对话框

//setPositiveButton()和setNegativeButton():添加确定和取消按钮
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle();
...
builder.setPositiveButton("确认", new DialogInterface.OnClickListener(){
...
}
builder.setNegativeButton("取消", new DialogInterface.OnClickListener(){
...
}
Dialog dialog = builder.create();
dialog.show();
//setSingleChoiceItems()
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle();
builder.setIcon();
builder.setSingleChoiceItems(data,0,new DialogInterface.OnClickListener(){
...
});
Dialog dialog = builder.create();
dialog.show();

WebView

//uri , setAction , setData
Uri uri = Uri.parse(url);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(uri);
startActivity(intent);
<WebView>
</WebView>
//
webView = findViewById(R.id.webView);
webView.loadUrl(url);
//
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
//
webView.setWebViewClient(new WebViewClient(){
...
}); //
webView.setWebChromeClient(new WebChromeClient(){
...
//
if(dialog != null && dialog.isShowing()){
dialog.dismiss():
dialog = null;
}
...
//
if(dialog == null){
dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle();
...
dialog.show();
}else{
dialog.setProgress(newProgress);
}
}

Fragment:为了解决Android碎片化

Fragment is added
onAttach()
onCreate()
onCreateView()
onActivityCreated()
onStart()
onResume()
Fragement is activite
onPause()
onStop()
onDestroyView();
onDestroy()
onDetach()
Fragment is destroyed
onCreate()
onCreateView()
onActivityCreated()
onStart()
onResume()
onPause()
onStop() onStart()
onResume()
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
//
MyFragment fragment = new MyFragment();
FragementManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction = fragmentManager.beginTransaction(); beginTransaction.add(R.id.layout,fragment);
beginTransaction.commit(); //
getFragmentManager().beginTransaction().add(R.id.layout,fragment).commit(); //myFragment = (MyFragment)getFragmentManager(). findFragmentById(R.id.fragment);
//Fragment.java
Toast.makeText(getActivity(),"dashu",Toast.LENGTH_SHORT).show();

File,SharedPreferences,SQLite

private SQLiteDatabase db;
public class MyHelper extends SQLiteOpenHelper{
public static String CREATE_TABLE="create table student("
+ " _id integer primary key autoincrement,"
+ "name varchar(20),"
+ "age integer,"
+ "sex varchar(2)";
public Context mContext; public MyHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){
super(context,name,factory,version);
mContext=context;
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL();
} //
Cursor cursor=db.query("student",null,null,null,null,null,null);
if(cursor!=null){
while(cursor.moveToNext()){ }
}

ContentProvider

Android四大组件之一,为存储和获取数据提供统一的接口。

自定义类继承ContentProvider,通过android:authorities属性授权。ContentResolver内容处理者,提供ContentProvider中同名同参的增删改查方法。

boolean onCreate()
String getType(Uri uri)
Cursor query()
Uri insert()
int update()
int delete()
//URI : 完整的uri路径
//
ContentProvider内容提供者
ContentResolver内容解析者

Spinner下拉框

<RelativeLayout>
<Spinner
android:id="@+id/spinner" ...
</RelativeLayout>
//android:entries="@array/list"
<resources>
<array name="list">
<item>1</item>
<item>2</item>
</array>
</resources>
public class MainActivity extends AppCompatActivity{
private Spinner mSpinner;
...
//
final String[] arrays = getResources().getStringArray(R.array.list);
//
ArrayAdapter<String> mSpinnerAdaper=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_spinner_item,arrays);
mSpinner.setAdapter(mSpinnerAdaper);
//setOnItemSelectedListener()
...
}

如果觉得不错,那就点个赞吧!❤️

编辑 :达叔

定位:分享 Android&Java 知识点

Android之控件与布局,结构知识点,基础完结的更多相关文章

  1. Android 手机卫士--自定义组合控件构件布局结构

    由于设置中心条目中的布局都很类似,所以可以考虑使用自定义组合控件来简化实现 本文地址:http://www.cnblogs.com/wuyudong/p/5909043.html,转载请注明源地址. ...

  2. Android编程 控件与布局

    控件和布局的继承结构 常用控件 1.TextView <?xml version="1.0" encoding="utf-8"?> <Line ...

  3. android之控件与布局

    基本控件:TextViewButtonEditTextImageViewAlertDialog.BubliderProgressDialog 四种基本布局的特殊属性: LinerLayout andr ...

  4. Android:控件布局(相对布局)RelativeLayout

    RelativeLayout是相对布局控件:以控件之间相对位置或相对父容器位置进行排列. 相对布局常用属性: 子类控件相对子类控件:值是另外一个控件的id android:layout_above-- ...

  5. Android:控件布局(线性布局)LinearLayout

    LinearLayout是线性布局控件:要么横向排布,要么竖向排布 决定性属性:必须有的! android:orientation:vertical (垂直方向) .horizontal(水平方向) ...

  6. Android:控件布局(相对布局)RelativeLayout(转)

    相对布局常用属性: 子类控件相对子类控件:值是另外一个控件的id android:layout_above----------位于给定DI控件之上android:layout_below ------ ...

  7. Android 开源控件与常用开发框架开发工具类

    Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...

  8. Android基本控件之Menus

    在我们的手机中有很多样式的菜单,比如:我们的短信界面,每条短信,我们长按都会出现一个菜单,还有很多的种类.那么现在,我们就来详细的讨论一下安卓中的菜单 Android的控件中就有这么一个,叫做Menu ...

  9. 背水一战 Windows 10 (38) - 控件(布局类): Panel, Canvas, RelativePanel, StackPanel, Grid

    [源码下载] 背水一战 Windows 10 (38) - 控件(布局类): Panel, Canvas, RelativePanel, StackPanel, Grid 作者:webabcd 介绍背 ...

随机推荐

  1. Flannel网络插件配置

    # ps -ef|grep docker|grep bip FLANNEL_OPTIONS="-ip-masq=true" -ip-masq=true 这个参数的目的是让flann ...

  2. C# 数值的隐式转换

    Debug2.Log(5/8.0f, 5.0f/8, 5/8);//output:0.625, 0.625, 0 隐式数值转换表

  3. ReactiveX 学习笔记(20)使用 RxJava + RxBinding 进行 GUI 编程

    课题 程序界面由3个文本编辑框和1个文本标签组成. 要求文本标签实时显示3个文本编辑框所输入的数字之和. 文本编辑框输入的不是合法数字时,将其值视为0. 3个文本编辑框的初值分别为1,2,3. 创建工 ...

  4. springMVC自定义全局异常

    SpringMVC通过HandlerExceptionResolver处理程序异常,包括Handler映射,数据绑定以及目标方法执行时所发生的异常. SpringMVC中默认是没有加装载Handler ...

  5. pycharm的断点调试【转自https://blog.csdn.net/weixin_39198406/article/details/78873120】

    1. show execution point (F10)显示目前项目所有断点2. step over (F8)下一步但仅限于设置断点的文件3. step into (F7)执行下一行4. step ...

  6. JVM系列1:Java内存区域

    JVM系列主要分享自己都虚拟机的理解,我自学时的知识框架多来源于<深入理解Java虚拟机_JVM高级特性与最佳实践>这本书,感兴趣的朋友可直接去阅读这本书. 本系列暂定有3部分,它们是学习 ...

  7. 用命令生成Webservice 对应的代理类

    wsdl /language:C# /namespace:Camstar.WebPortal.WebPortlets.Shopfloor.SAP.GreatWall /out:gwSAPService ...

  8. MAC book 无法删除普通用户的解决办法

    1来自苹果官网 macOS Sierra: 删除用户或群组 如果您是管理员,当您不想再让某些用户访问 Mac 时,可以删除他们.您也可以删除不想要的群组. 删除用户时,您可以存储该用户的个人文件夹(包 ...

  9. python--事务操作

    #coding=utf-8 import sys import MySQLdb class TransferMoney(object): def __init__(self,conn): self.c ...

  10. centos 7 命令行模式和桌面版之间的切换

    CentOS7图形界面与命令行界面切换 在图形界面使用 ctrl+alt+F2切换到dos界面 dos界面 ctrl+alt+F2切换回图形界面 在命令上 输入 init 命令 切换到dos界面 输入 ...