想通过Android Studio做毕业设计,因此开始学习此软件
1.TextView 设置跑马灯形式的滚动文本
<TextView
android:id="@+id/tv_one"
android:text="@string/tv_one"
android:shadowColor="@color/red"
android:shadowRadius="3"
android:shadowDx="10.0"
android:shadowDy="10.0"
android:gravity="center_horizontal"
android:textColor="@color/black"
android:textSize="30sp"
android:textStyle="italic"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<requestFocus/>
</TextView>
2.Button 使用StateListDrawable设置不同的图片效果
设置背景颜色或者图片时要先在themes.xml文件中的style标签第一行最后添加.Bridge
添加图片:drawable文件新建drawable resource file,用item标签添加图片;
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_baseline_accessibility_24" android:state_pressed="true"/>
<item android:drawable="@drawable/ic_baseline_accessibility_new_24"/>
</selector>
设置颜色:显示顺序是背景色—文字色—前景色,res文件新建Directory,再在其中新建drawable resource file
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/red" android:state_pressed="true"/>
<item android:color="@color/black"/>
</selector>
添加点击、长按、触摸事件,在MainActivity.java文件中添加
public class MainActivity extends AppCompatActivity {
private static final String TAG ="Rong" ;
private
@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;
}
});
//触摸事件,分三种 + motionEvent.getAction()打印0 1 2
btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Log.e(TAG, "onTouch: " + motionEvent.getAction());
return false;
}
});
}
public void RongClick(View view) {
Log.e(TAG, "onClick: " );
}
}
}
最后activity_main.xml中代码如下:
<Button
android:id="@+id/btn"
android:text="我是按钮"
android:background="@drawable/btn_selector"
android:backgroundTint="@color/btn_color_selector"
android:foreground="#9900ff00"
android:onClick="RongClick" //添加后相当于注释掉的点击事件
android:layout_width="200dp"
android:layout_height="100dp"/>
3.EditText的使用
<EditText
android:id="@+id/et"
android:hint="请输入用户名"
android:textColorHint="#95a1aa"
android:inputType="text"
android:drawableLeft="@drawable/ic_baseline_insert_emoticon_24"
android:drawablePadding="10dp"
android:paddingLeft="20dp"
android:background="@color/white"
android:layout_width="200dp"
android:layout_height="100dp"/>
<EditText
android:hint="请输入密码"
android:textColorHint="#95a1aa"
android:inputType="textPassword"
android:drawableLeft="@drawable/ic_baseline_insert_emoticon_24"
android:drawablePadding="10dp"
android:paddingLeft="20dp"
android:background="@color/white"
android:layout_width="200dp"
android:layout_height="100dp"/>
<Button
android:id="@+id/btn"
android:text="获取用户名"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
//java文件
public class MainActivity extends AppCompatActivity {
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 text = et.getText().toString();
Log.e("Rong", "输入的用户名: "+text);
}
});
}
}
4.ImageView
<ImageView
android:src="@drawable/bottle"
android:maxHeight="200dp"
android:maxWidth="200dp"
android:adjustViewBounds="true"
android:layout_width="200dp"
android:layout_height="200dp"/>
设置号最大最小界限后,设置adjustViewBounds为true,使得界限刚好与图片边界重合。
5.ProgressBar
<Button
android:text="显示隐藏加载器"
android:onClick="RongClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ProgressBar
android:id="@+id/pb2"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:indeterminate="true"
android:layout_width="300dp"
android:layout_height="wrap_content"/>
<Button
android:text="模拟下载"
android:onClick="Load"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
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 Load(View view) {
int progress = progressbar2.getProgress();
progress += 10;
progressbar2.setProgress(progress);
}
}
android:indeterminate="true"的作用是让进度条自动播放。
6.Notification
<Button
android:text="发送通知"
android:onClick="SendNotification"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:text="取消通知"
android:onClick="CancelNotification"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
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){
NotificationChannel channel = new NotificationChannel("Rong","测试通知",NotificationManager.IMPORTANCE_HIGH);//重要性最高,窗口弹出
manager.createNotificationChannel(channel);
}
//跳转意图
Intent intent = new Intent(this, NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,0,intent,0);
notification = new NotificationCompat.Builder(this,"Rong")
.setContentTitle("重要通知") //设置标题
.setContentText("世界这么大,想去走走吗?") //设置文本内容
.setSmallIcon(R.drawable.ic_baseline_accessibility_new_24) //设置阿尔法小图标,不能是RGB图层
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.bottle)) //有颜色的大图标(一张图片即可)
.setContentIntent(pi)//设置点击通知后的跳转意图 pi
.setAutoCancel(true)//点击通知自动取消
.build();
//发送通知
public void SendNotification(View view) {
manager.notify(1,notification);
}
public void CancelNotification(View view) {
manager.cancel(1);
}
}
这里要注意,要实现点击通知后跳转页面需要新建一个java文件,这里测试只需要打印“进入NotificationActivity”即可。不要忘记在AndroidManifest中注册一下。
public class NotificationActivity extends Activity { //alt+enter 注册一下
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("Rong", "onCreate: 进入NotificationActivity" );
}
}
7.Toolbar
themes.xml文件的style标签内容改为parent=“Theme.MaterialComponents.DayNight.NoActionBar.Bridge” 可以去掉默认的导航栏。
<androidx.appcompat.widget.Toolbar
android:id="@+id/tb"
android:background="#ffff00"
app:navigationIcon="@drawable/ic_baseline_arrow_back"
app:title="标题"
app:titleTextColor="#ff0000"
app:titleMarginStart="126dp"
app:subtitle="子标题"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
<androidx.appcompat.widget.Toolbar
android:id="@+id/tb2"
android:background="#ffff00"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
<TextView
android:gravity="center"
android:layout_gravity="center"
android:text="标题"
android:textSize="25sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.appcompat.widget.Toolbar>
import androidx.appcompat.widget.Toolbar;//这里要注意要导入androidx的包,
//而不是android的包,因为xml中使用的是androidx
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.tb);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("Rong", "onClick:toolbar被点击了 " );
}
});
Toolbar toolbar2 = findViewById(R.id.tb2);
toolbar2.setNavigationIcon(R.drawable.ic_baseline_arrow_back);
toolbar2.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("Rong", "onClick:toolbar 2 被点击了 " );
}
});
}
8.AlertDialog
<Button
android:text="显示对话框"
android:onClick="ADclick"
android:background="@color/btn_color_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
java部分:
public void ADclick(View view) {
//添加对话框内部的view
View dialogview = getLayoutInflater().inflate(R.layout.dialog_view, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);//构建器设置链式设置
builder.setIcon(R.mipmap.ic_launcher) //设置图标
.setTitle("我是对话框")
.setMessage("今天下雪啦~")
.setView(dialogview)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.e("yes", "onClick:点击了确定 " );
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.e("no", "onClick:点击了取消 " );
}
})
.setNeutralButton("中间", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.e("med", "onClick:点击了取消 " );
}
})
.create() //上面三个都是AlertDialog里的builder内部的,可以用链式结构,而create是返回AlertDialog,所以放在后面
.show();//show是Dialog里的,所以放到最后面
}
这里需要新建一个layout文件下的xml文件dialog_view.xml用来描述对话框内部的一个View。
<?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:background="#ffff00"
android:orientation="horizontal">
<ImageView
android:src="@mipmap/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:text="下雪啦~~"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
9.PopupWindow
在layout中新建popup_view.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:background="@mipmap/ic_launcher"
android:orientation="vertical">
<!-- 图片大小会影响弹出窗口大小-->
<Button
android:id="@+id/shanghai"
android:text="上海"
android:textSize="18sp"
android:padding="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/beijing"
android:text="北京"
android:padding="5dp"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
activity_main.xml中 “弹出PopupWindow” 按钮:
<Button
android:text="弹出PopupWindow"
android:onClick="popclick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
按钮对应的java函数:
public void popclick(View view) {
View popupview = getLayoutInflater().inflate(R.layout.popup_view, null);
Button shanghai = popupview.findViewById(R.id.shanghai);//用的是popup_view里的按钮,因此要用popupview.findViewById
Button beijing = popupview.findViewById(R.id.beijing);
//ViewGroup.LayoutParams.WRAP_CONTENT可使得PopupWindow刚好包裹住 popup_view,相当于wrap_content
PopupWindow popupWindow = new PopupWindow(popupview,ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,true);
//popupview.setBackgroundDrawable(getResources().getDrawable(R.drawable.bottle));
popupview.setBackground(getResources().getDrawable(R.drawable.bottle));
popupWindow.showAsDropDown(view);//点击后显示,view使得popupwindow显示在view对应的按钮正下方无偏移
shanghai.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e(TAG, "onClick:你是住在上海吗");
popupWindow.dismiss();
}
});
beijing.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e(TAG, "onClick:你是住在北京吗");
popupWindow.dismiss();
}
});
}
部分代码实现的整体效果图: