一路繁花似锦绣前程
失败的越多,成功才越有价值

导航

 

安卓入门

一、从安装到运行

1、下载
下载地址:https://developer.android.google.cn/studio
2、安装
安装过程中,都选默认选项安装;
可能遇到【Unable to access Android SDK and-on list】问题,选【Cancel】,后续安装过程会安装上Android SDK。
3、创建项目
模板选【Empty Activity】;
【Save location】为项目目录;
【Use legacy android.support libraries】选项不要勾选。
4、项目结构

5、安装虚拟机
右上角点击【AVD Manager】安装; 
遇到问题【HAXM is not installed】,按提示【Install Haxm】安装即可。
6、运行

二、基础控件

1、TextView
<TextView
    android:id="@+id/tv_one"    :为TextView设置一个组件id
    android:layout_width="200dp"    :组件的宽度
    android:layout_height="200dp"   :组件的高度
    android:background="@color/purple_200"  :控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片
    android:gravity="center_horizontal" :设置控件中内容的对齐方向,TextView中是文字,ImageView中是图片等等
    android:text="@string/hello"    :设置显示的文本内容
    android:textColor="#ffff0000"   :设置字体颜色
    android:textSize="20sp" :字体大小,单位一般是用sp
    android:textStyle="normal"  :设置字体风格,三个可选值:normal(无效果),bold(加粗),italic(斜体)

    android:shadowColor="@color/red"    :设置阴影颜色,需要与shadowRadius一起使用
    android:shadowDx="10.0" :设置阴影在水平方向的偏移,就是水平方向阴影开始的横坐标位置
    android:shadowDy="10.0" :设置阴影在竖直方向的偏移,就是竖直方向阴影开始的纵坐标位置
    android:shadowRadius="3.0"  :设置阴影的模糊程度,设为0.1就变成字体颜色了,建议使用3.0

    android:singleLine="true"   :内容单行显示
    android:ellipsize="marquee" :在哪里省略文本
    android:marqueeRepeatLimit="marquee_forever"    :字幕动画重复的次数
    android:focusable="true"    :是否可以获取焦点
    android:focusableInTouchMode="true" :用于控制视图在触摸模式下是否可以聚焦>
    <requestFocus />    :获取焦点
</TextView>
2、Button
<Button :Button继承TextView
    android:id="@+id/btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/btn_selector" :引用的位图,themes.xml文件DarkActionBar后需要加.Bridge
    android:backgroundTint="@color/btn_color_selector"  :引用的位图颜色
    android:onClick="llClick"   :对应MainActivity生成的llClick(View)方法
    android:text="@string/anniu"
/>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_baseline_ac_unit_24"   :引用的Drawable位图
        android:color="@color/green"    :引用的颜色
        android:state_focused="true"    :是否获得焦点
        android:state_pressed="true"    :控件是否被按下
        android:state_enabled="true"    :控件是否可用
        android:state_selected="true"   :控件是否被选择,针对有滚轮的情况
        android:state_checked="true"    :控件是否被勾选
        android:state_checkable="true"  :控件可否被勾选,eg:checkbox
    ></item>
</selector>

// 执行顺序:触摸事件(返回值为true,后续事件不触发)->长按事件(返回值为true,后续事件不触发)->点击事件
View btn = findViewById(R.id.btn);
// 点击事件
btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        System.out.println("click");
    }
});
// 长按事件
btn.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        System.out.println("long click");
        return false;
    }
});
// 触摸事件
btn.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        System.out.println("touch" + event.getAction());
        return false;
    }
});
四种方式实现点击事件:
  1、内部类实现View.OnClickListener接口
  2、匿名内部类new接口
  3、当前类实现接口
  4、Button标签加onClick属性
3、EditText
<EditText
    android:id="@+id/ipt"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="#99000000"  :背景色
    android:drawableLeft="@drawable/ic_baseline_person_outline_24"  :在输入框的指定方位添加图片
    android:drawablePadding="20dp"  :设置图片与输入内容的间距
    android:hint="请输入内容"    :输入提示
    android:inputType="number"  :输入类型
    android:paddingLeft="20dp"  :设置内容与边框的间距
    android:textColorHint="@color/green"    :输入提示文字的颜色
></EditText>

// 获取输入框内容
EditText ipt = findViewById(R.id.ipt);
System.out.println(ipt.getText().toString());
4、ImageView
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true" :调整View的界限
    android:maxWidth="200dp"    :最大宽度
    android:maxHeight="200dp"   :最大高度
    android:scaleType="fitCenter"   :设置图片缩放类型
    android:src="@drawable/img" :设置图片资源
></ImageView>
5、ProgressBar
<ProgressBar
    style="?android:attr/progressBarStyleHorizontal"    :水平进度条
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:indeterminate="false"   :如果设置成true,则进度条不精确显示进度
    android:max="100"   :进度条的最大值
    android:progress="30"   :进度条已完成进度值
    android:visibility="gone"   :进度条是否显示
></ProgressBar>
6、Notification
public class MainActivity extends AppCompatActivity {
    private NotificationManager manager;
    private Notification notification;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);//获取通知管理

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//判断sdk是否大于8.0
            NotificationChannel channel = new NotificationChannel("ll", "通知", NotificationManager.IMPORTANCE_HIGH);//创建通知渠道,参数:(渠道id,渠道名称,通知等级)
            manager.createNotificationChannel(channel);//通知管理设置通知渠道
        }

        Intent intent = new Intent(this, NotificationActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

        notification = new NotificationCompat.Builder(this, "ll")//创建通知,参数:(this,渠道id)
                .setContentTitle("官方通知")//设置通知标题
                .setContentText("世界那么大,我想去走走")//设置通知内容
                .setSmallIcon(R.drawable.ic_baseline_person_outline_24)//设置通知图标
                .setColor(Color.parseColor("#00ff00"))//设置通知图标颜色
                .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.img))//设置通知图片
                .setContentIntent(pendingIntent)//设置通知点击后跳转页面
                .setAutoCancel(true)//设置通知点击后关闭
                .build();
    }

    public void sendNotice(View view) {
        manager.notify(1, notification);//发送通知
    }

    public void cancelNotice(View view) {
        manager.cancel(1);//关闭通知
    }
}
7、Toolbar
xmlns:app="http://schemas.android.com/apk/res-auto"

<androidx.appcompat.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="#ffff0000"
    app:logo="@drawable/ic_baseline_ac_unit_24"
    app:navigationIcon="@drawable/ic_baseline_arrow_back_24"
    app:subtitle="子标题"
    app:subtitleTextColor="@color/black"
    app:title="标题"
    app:titleMarginStart="100dp"
    app:titleTextColor="@color/green">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="标题" />
</androidx.appcompat.widget.Toolbar>
8、AlertDialog
a、普通对话框
public void dialogButton(View view) {
    View dialogView = getLayoutInflater().inflate(R.layout.activity_notification, null);//获取自定义布局

    // 两种上下文区别:this代表子类(activity),getApplicationContext()代表父类,子类有的父类不一定有
    AlertDialog.Builder builder = new AlertDialog.Builder(this);//构建Dialog的各种参数。构造对话框对象的参数必须是this
    builder.setIcon(R.drawable.ic_baseline_person_outline_24)//添加ICON
            .setTitle("弹窗")//添加标题
            .setMessage("这是一段中文")//添加消息
            .setView(dialogView)//设置自定义布局
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Log.e("", "点击了确定");
                }
            })//确定按钮
            .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Log.e("", "点击了取消");
                }
            })//取消按钮
            .setNeutralButton("中间", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Log.e("", "点击了中间");
                }
            })//中间按钮
            .create()//创建Dialog
            .show();//显示对话框
}
b、单选对话框
public void btnClick(View view) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    String[] items = {"鞠婧祎", "黄婷婷", "孟美岐"};
    builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            String item = items[which];
            Toast.makeText(getApplicationContext(), item, Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });
    builder.show();
}
c、多选对话框
public void btnClick(View view) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    String[] items = {"鞠婧祎", "黄婷婷", "孟美岐", "姜贞羽", "安吉拉"};
    boolean[] checkeds = {false, true, false, false, true};
    builder.setMultiChoiceItems(items, checkeds, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {

        }
    });
    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < checkeds.length; i++) {
                if (checkeds[i]) {
                    sb.append(items[i] + ",");
                }
            }
            Toast.makeText(getApplicationContext(), sb, Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });
    builder.show();
}
d、进度条对话框
public void btnClick(View view) {
    ProgressDialog dialog = new ProgressDialog(this);
    dialog.setTitle("加载中...");
    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    dialog.show();

    new Thread() {
        @Override
        public void run() {
            dialog.setMax(100);
            for (int i = 0; i < 100; i++) {
                // 与进度相关的控件可在子线程直接更新UI
                dialog.setProgress(i);
                // 睡眠一会
                SystemClock.sleep(50);
            }
            dialog.dismiss();
        }
    }.start();
}
9、PopupWindow
public void popupButton(View view) {
    View popupView = getLayoutInflater().inflate(R.layout.activity_popupwindow, null);//获取自定义布局
    Button btn1 = popupView.findViewById(R.id.btn1);
    Button btn2 = popupView.findViewById(R.id.btn2);

    PopupWindow popupWindow = new PopupWindow(popupView,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            true);//参数:(设置PopupWindow显示的View,宽,高,设置是否获取焦点)
    popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.img));//设置背景
    popupWindow.showAsDropDown(view);//相对某个控件的位置(正左下方),无偏移

    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.e("", "点击确定");
        }
    });
    btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.e("", "点击取消");
            popupWindow.dismiss();//关闭弹窗
        }
    });
}
10、右上角菜单
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //右上角的菜单按钮
        menu.add(0, 1, 0, "前进");
        menu.add(0, 2, 0, "后退");
        menu.add(0, 3, 0, "首页");
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        int itemId = item.getItemId();
        if (itemId == 1) {
            System.out.println("前进");
        } else if (itemId == 2) {
            System.out.println("后退");
        } else if (itemId == 3) {
            System.out.println("首页");
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * 右上角菜单栏点击时,调用此方法。当返回值为false时,则不使用系统默认的菜单栏显示
     */
    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        return super.onMenuOpened(featureId, menu);
    }
}
11、可搜索下拉框
  • activity_main.xml
<?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">

    <!--android:completionThreshold="2":下拉框显示时,输入框字数的要求-->
    <AutoCompleteTextView
        android:id="@+id/actv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:completionThreshold="2" />
</LinearLayout>
  • MainActivity
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AutoCompleteTextView actv = findViewById(R.id.actv);
        String[] arrs = new String[]{"aaa", "bbb", "abb", "aab"};
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, arrs);
        actv.setAdapter(adapter);
    }
}
posted on 2021-10-22 11:10  一路繁花似锦绣前程  阅读(121)  评论(0编辑  收藏  举报