Android之控制項與佈局,結構知識點,基礎完結

来源:https://www.cnblogs.com/dashucoding/archive/2018/07/08/9279958.html
-Advertisement-
Play Games

版權聲明:未經博主允許不得轉載 在Android中我們常常用到很多UI控制項,如 ,`EditText ImageView Button ImageButton ToggleButton CheckBox RadioButton`等等這些可以自己多用就會了。 也會學到一些佈局如: ,`Relative ...


版權聲明:未經博主允許不得轉載

標題圖

在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 知識點


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 視頻課程:李興華 Oracle從入門到精通視頻課程 學習者:陽光羅諾 視頻來源:51CTO學院 Oracle資料庫從入門到精通-單行函數 在資料庫中,為了方便用戶的數據開發,往往會提供一系列的支持函數,利用這些函數可以針對於數據處理。 例如:在進行根據姓名查詢的時候,如果說姓名本身是大寫字母,而查詢 ...
  • 提示框,菜單,數據存儲,組件篇 Toast Toast.makeText(context, text, 時間).show(); setDuration();//設置時間 setGravity();//位置 獲取: 添加toast.getView(); imageView添加到toast中,addVi ...
  • 前言 大家好,給大家帶來 的概述,希望你們喜歡 Activity是什麼 作為一個Activity,就是一個界面,當我們在手機上打開一個APP時,你看到的頁面就是基於Activity生成的。 那麼你再點擊一個按鈕跳轉到另一個界面時,就是又一個Activity界面,由Activity可以分出很多的知識點 ...
  • 前言 大家好,給大家帶來 的概述,希望你們喜歡 TextView控制項 TextView控制項有哪些屬性: EditText控制項 EditText控制項有哪些屬性: 設置顏色 1. 在xml中是android:textColor 2. 在Activity中是setTextColor AutoComplet ...
  • 前言 大家好,給大家帶來 的概述,希望你們喜歡 內容 什麼是Sqlite: 效率高,開源,小型,程式驅動,支持事務操作,無數據類型,可嵌入的關係型資料庫 獨立的,跨平臺的,代碼量少,簡單易用 創建表語句 刪除表 插入數據 修改數據 更新數據 刪除數據 查詢語句 內容 創建資料庫 實現資料庫中的增刪改 ...
  • git上clone一個Gradle項目,使用AS的gradle sync報錯如下: 原因:本地gradle版本不匹配。 解決方法:修改根目錄下的build.gradle 中的classpath為本地已經下載的gradle版本或者本地下載安裝依賴版本。 ...
  • 1、 前言 如果你對App優化比較敏感,那麼Apk安裝包的大小就一定不會忽視。關於瘦身的原因,大概有以下幾個方面: 對於用戶來說,在功能差別不大的前提下,更小的Apk大小意味更少的流量消耗,也意味著更多的用戶下載; 對於產品來說,大於競品的Apk意味著較低的下載基數,不利於驗證產品策略; 對於開發人 ...
  • 在學習Android軟體安全的過程中,經常要用到Android的動態調試。但是呢,一般的Android應用在發佈的時候都是發佈版的不能直接被調試,為了能使Android應用能夠支持調試就需要對Android應用進行解包以及打包加android:debuggable="true"屬性處理,比較煩的是有 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...