1. 程式人生 > 其它 >基礎控制元件(Button,Edittext,ImageView,ProgressBar,Notification,ToolBar,AlertDialog,PopupWindow)

基礎控制元件(Button,Edittext,ImageView,ProgressBar,Notification,ToolBar,AlertDialog,PopupWindow)

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();            }        });    }}