基礎控制元件(Button,Edittext,ImageView,ProgressBar,Notification,ToolBar,AlertDialog,PopupWindow)
阿新 • • 發佈:2021-06-30
Button
觸發事件
<?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"> <Button android:id="@+id/btn" android:onClick="myClick" android:background="@drawable/btn_selector" android:backgroundTint="@color/btn_color_selector" android:layout_width="200dp" android:layout_height="100dp"/> </LinearLayout>
package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = findViewById(R.id.btn); // 點選觸發 // btn.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View view) { // Log.e(TAG, "onClick:"); // } // }); // 長按觸發 btn.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { Log.e(TAG, "onLongClick:"); return false; // 改為true時,執行onLongClick後不會執行onClick } }); // 觸控事件 btn.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { Log.e(TAG, "onTouch:" + motionEvent.getAction()); return false; // 改為true時,執行onTouch後不會執行onLongClick和onClick } }); } public void myClick(View view) { Log.e(TAG, "onClick:"); } }
EditText
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> <EditText android:id="@+id/et" android:hint="輸入賬號" android:inputType="number" android:drawableLeft="@drawable/ic_baseline_person_24" android:drawablePadding="20dp" android:paddingLeft="20dp" android:textColorHint="#95a1aa" android:layout_width="200dp" android:layout_height="100dp"/> <EditText android:hint="輸入密碼" android:inputType="textPassword" android:textColorHint="#95a1aa" android:layout_width="200dp" android:layout_height="100dp"/> <Button android:id="@+id/btn" android:text="獲取賬號" android:layout_width="200dp" android:layout_height="100dp"/> </LinearLayout>
package com.example.myedittext;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "wmj";
private EditText et;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.btn);
et = findViewById(R.id.et);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String str = et.getText().toString();
Log.e(TAG, "輸入的賬號為:" + str);
}
});
}
}
ImageView
<ImageView
android:src="@drawable/pic1"
android:scaleType="centerInside"
android:layout_width="200dp"
android:layout_height="200dp"/>
<ImageView
android:src="@drawable/pic2"
android:maxHeight="300dp"
android:maxWidth="300dp"
android:adjustViewBounds="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
ProgressBar
<ProgressBar
android:id="@+id/pb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:onClick="myClick"
android:text="顯示隱藏進度條"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ProgressBar
android:id="@+id/pb2"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:max="100"
android:indeterminate="true"
android:layout_width="300dp"
android:layout_height="100dp"/>
<Button
android:onClick="load"
android:text="模擬下載"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
package com.example.myprogressbar;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;
public class MainActivity extends AppCompatActivity {
private ProgressBar progressBar;
private ProgressBar progressBar2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = findViewById(R.id.pb);
progressBar2 = findViewById(R.id.pb2);
}
public void myClick(View view) {
if(progressBar.getVisibility() == View.GONE){
// 若隱藏則顯示
progressBar.setVisibility(View.VISIBLE);
}else{
progressBar.setVisibility(View.GONE);
}
}
public void load(View view) {
int progress = progressBar2.getProgress();
progress += 10;
progressBar2.setProgress(progress);
}
}
Notification
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="sendNotification"
android:text="傳送通知"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="cancelNotification"
android:text="關閉通知"/>
點選通知跳轉到的頁面
package com.example.mynotification;import android.app.Activity;import android.os.Bundle;import android.util.Log;import androidx.annotation.Nullable;public class NotificationActivity extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e("wmj", "NotificationActivity"); }}
主頁面
package com.example.mynotification;import androidx.appcompat.app.AppCompatActivity;import androidx.core.app.NotificationCompat;import android.app.Notification;import android.app.NotificationChannel;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Intent;import android.graphics.BitmapFactory;import android.graphics.Color;import android.os.Build;import android.os.Bundle;import android.view.View;public class MainActivity extends AppCompatActivity { private NotificationManager notificationManager; private Notification notification; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 獲取通知管理器類物件 notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // 判斷版本是否是8.0及以上 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ // 通知渠道,引數3是通知重要程度 NotificationChannel notificationChannel = new NotificationChannel("wmj", "測試通知", NotificationManager.IMPORTANCE_HIGH); notificationManager.createNotificationChannel(notificationChannel); } // 點選通知後跳轉到的頁面 Intent intent = new Intent(this, NotificationActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); // Builder構造器建立Notification物件 notification = new NotificationCompat.Builder(this, "wmj") .setContentTitle("重要通知") .setContentText("哈哈哈") .setAutoCancel(true) // 點選通知後自動消失 .setSmallIcon(R.drawable.ic_baseline_person_24) // 不能使用彩色圖片 .setContentIntent(pendingIntent) // 設定待定的頁面 .setColor(Color.parseColor("#FF0000")) // 小圖示顏色 .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.dog)) // 通知右側大圖示 .build();// id和上面一致 } public void sendNotification(View view) { notificationManager.notify(1, notification); } public void cancelNotification(View view) { notificationManager.cancel(1); }}
ToolBar
- 在themes.xml中關閉toolbar:parent="Theme.MaterialComponents.DayNight.NoActionBar
<?xml version="1.0" encoding="utf-8"?><LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> <androidx.appcompat.widget.Toolbar android:id="@+id/tb" android:background="#ffff00" app:navigationIcon="@drawable/ic_baseline_arrow_back_24" app:title="主標題" app:titleTextColor="#ff0000" app:titleMarginStart="50dp" app:subtitle="子標題" app:subtitleTextColor="#00ff00" app:logo="@mipmap/ic_launcher" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"/> <androidx.appcompat.widget.Toolbar android:id="@+id/tb2" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:layout_marginTop="10dp" android:background="#ffff00"/> <androidx.appcompat.widget.Toolbar android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:layout_marginTop="10dp" app:navigationIcon="@drawable/ic_baseline_arrow_back_24" android:background="#ffff00"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_gravity="center" android:text="標題"/> </androidx.appcompat.widget.Toolbar></LinearLayout>
package com.example.mytoolbar;import androidx.annotation.RequiresApi;import androidx.appcompat.app.AppCompatActivity;import androidx.appcompat.widget.Toolbar;import android.os.Build;import android.os.Bundle;import android.util.Log;import android.view.View;public class MainActivity extends AppCompatActivity { @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 注意是import androidx.appcompat.widget.Toolbar; Toolbar toolbar = findViewById(R.id.tb); Toolbar toolbar2 = findViewById(R.id.tb2); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.e("wmj", "點選了導航欄返回按鈕"); } }); toolbar2.setNavigationIcon(R.drawable.ic_baseline_arrow_back_24); toolbar2.setTitle("標題"); toolbar2.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.e("wmj", "點了"); } }); }}
AlertDialog
<?xml version="1.0" encoding="utf-8"?><LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="horizontal" android:background="#FFFF00" xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"/> <TextView android:text="哈哈" android:layout_width="wrap_content" android:layout_height="wrap_content"/></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="顯示對話方塊" android:onClick="myClick"/></LinearLayout>
package com.example.myalterdialog;import androidx.appcompat.app.AlertDialog;import androidx.appcompat.app.AppCompatActivity;import android.content.DialogInterface;import android.os.Bundle;import android.util.Log;import android.view.View;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void myClick(View view) { View dialog_view = getLayoutInflater().inflate(R.layout.dialog_view, null); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.mipmap.ic_launcher) .setTitle("對話方塊") .setMessage("對話方塊內容") .setView(dialog_view) .setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Log.e("wmj", "確定"); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Log.e("wmj", "取消"); } }) .setNeutralButton("中間", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Log.e("wmj", "中間"); } }) // 以上返回的都是Builder,可以變換順序 .create() // 返回的是AlertDialog,不能放在前面 .show(); }}
PopupWindow
popup_view.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" android:background="@mipmap/ic_launcher" xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕1" android:padding="5dp" android:textSize="18sp"/> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕2" android:padding="5dp" android:textSize="18sp"/></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="myClick" android:text="彈出視窗"/></LinearLayout>
package com.example.mypopupwindow;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.LinearLayout;import android.widget.PopupWindow;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void myClick(View view) { View popupview = getLayoutInflater().inflate(R.layout.popup_view, null); Button btn1 = popupview.findViewById(R.id.btn1); Button btn2 = popupview.findViewById(R.id.btn2); // 最後一個引數加上後,點選空白處popupwindow會消失 PopupWindow popupWindow = new PopupWindow(popupview, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_baseline_airline_seat_recline_extra_24));// popupWindow.showAsDropDown(view); popupWindow.showAsDropDown(view, view.getWidth(), -view.getHeight()); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.e("wmj", "按鈕1"); popupWindow.dismiss(); } }); btn2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.e("wmj", "按鈕2"); popupWindow.dismiss(); } }); }}