- 1.布局
- 2.组件
- 3.其他
- 为组件添加点击事件
- 字符串资源的使用
- 在线播放MP3
- 物理按键事件
- 设置横屏和竖屏
- 在Java代码中设置全屏
- 打开TXT文件
- 判断文件是否存在
- 判断是否有权限
- 解决连接手机无法调试的问题
- 随机数
线性布局管理器:LinearLayout
- 垂直排列:android:orientation="vertical"
- 水平排列:android:orientation="horizontal"
- 居中排列:android:gravity="center"
- 居右下角排列:android:gravity="right|bottom"
- 设置组件分配剩余空间的权重:android:layout_weight="1"
基本程序单元:Activity
4种状态:
- 运行状态
- 暂停状态(一般在弹出确认退出对话框时执行)
- 停止状态
- 销毁状态(强制停止)
生命周期:
- onCreate()
- onStart()
- onResume()(开始运行)
- onPause()
- onStop()(可通过onRestart()返回onStart())
- onDestroy()
创建、启动和关闭Activity:
(也可以直接右键包通过Android Studio新建Activity)
-
创建继承自Activity的Activity
public class MainActivity extends Activity{ //... } -
重写需要回掉的方法
public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } } -
设置要显示的视图
public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);//设置布局 } } -
在AndroidManifest.xml的中配置Activity
启动和关闭Activity:
-
入口Activity:
配置AndroidManifest.xml,通过Intent来表达自己的“意图”:
-
其他Activity:
通过startActivity()来启动
-
关闭Activity:
通过finish()来关闭
-
刷新Activity:
通过onCreate(null)来刷新(如果该类继承的是AppCompatActivity的话则不能使用,必须是Activity)
Activity ComponentName:
Intent intent = new Intent();
ComponentName componentName = new ComponentName("com.yuxiang.myapplication","com.yuxiang.myapplication.FileExplore");
intent.setComponent(componentName);
startActivity(intent);
文本框:TextView
- 修改文字大小:android:textSize="27sp"
- 修改文字颜色:android:textColor="#FF0000"
- 设置单行文本框:android:singleLine="true"
编辑框:EditText
- 宽度随屏幕大小改变:android:layout_width="match_parent"
- 宽度随内容多少改变:android:layout_width="wrap_content"
- 添加灰色提示文字:android:hint="请输入名称"
- 设置为密码框:android:inputType="textPassword"
- 设置为只能输入数字:android:inputType="number"
- 取消编辑框下面的横线:android:background="@null"
- 添加图片:
- 左侧:android:drawableStart="@mipmap/img"
- 右侧:android:drawableEnd="@mipmap/img"
- 顶部:android:drawableTop="@mipmap/img"
- 底部:android:drawableBottom="@mipmap/img"
- 设置间距:android:drawablePadding="2dp"
- 设置文本框行数:android:lines="5"
- 设置单行文本框:android:singleLine="true"
- 获取文本框内容:getText()方法
xml代码:
android:id="@+id/btn"
Java代码:
Button button = findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "Click!", Toast.LENGTH_SHORT).show();
}
});
字符串资源的使用
在strings.xml(位于app > res > values > strings.xml下)下添加:
测试
xml内的使用方法:
android:text="@string/demo"在线播放MP3
请先在AndroidManifest.xml文件中添加联网权限:
Java代码:
MediaPlayer mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource("url");
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.stop();
mediaPlayer.release();
}
});
} catch (IOException e) {
e.printStackTrace();
}
物理按键事件
- 按下:onKeyDown()
- 抬起:onKeyUp()
- 长按:onKeyLongPress()
物理按键常量:
| KeyEvent类的按键名称 | 说明 |
|---|---|
| KEYCODE_HOME | 主页键(未开发给普通应用) |
| KEYCODE_BACK | 返回键 |
| KEYCODE_VOLUME_UP | 加大音量键 |
| KEYCODE_VOLUME_DOWN | 减小音量键 |
| KEYCODE_POWER | 电源键(未开发给普通应用) |
| KEYCODE_ENTER | 回车键 |
| KEYCODE_DEL | 删除键 |
| KEYCODE_MENU | 菜单键 |
| KEYCODE_SEARCH | 搜索键 |
| KEYCODE_APP_SWITCH | 任务键(未开发给普通应用) |
连续按下两次“返回键”退出应用程序
在Android Studio下按下Alt+Insert选择Override Methods...(重写方法),然后输入onKeyDown,回车即可快速插入
public class MainActivity extends Activity {
private long exitTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
exit();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void exit() {
if ((System.currentTimeMillis() - exitTime) > 2000) {
Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
finish();
System.exit(0);
}
}
}
给EditText添加按键监听
final EditText editText = findViewById(R.id.edit);
final TextView textView = findViewById(R.id.text);
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
switch (i) {
case KeyEvent.KEYCODE_ENTER:
textView.setText("按键为回车键");
break;
case KeyEvent.KEYCODE_DEL:
textView.setText("按键为删除键");
break;
case KeyEvent.KEYCODE_SEARCH:
textView.setText("按键为搜索键");
break;
case KeyEvent.KEYCODE_BACK:
textView.setText("按键为返回键");
break;
case KeyEvent.KEYCODE_MENU:
textView.setText("按键为菜单键");
break;
case KeyEvent.KEYCODE_VOLUME_UP:
textView.setText("按键为音量+键");
break;
case KeyEvent.KEYCODE_VOLUME_DOWN:
textView.setText("按键为音量-键");
break;
}
}
return false;
}
});
监听软键盘点击回车及换行事件
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEND || actionId == EditorInfo.IME_ACTION_DONE || (event != null && KeyEvent.KEYCODE_ENTER == event.getKeyCode() && KeyEvent.ACTION_DOWN == event.getAction())) {
Toast.makeText(MainActivity.this, "Enter!", Toast.LENGTH_SHORT).show();
}
return false;
}
});
附:屏蔽系统音量键
重写onKeyDown()方法即可
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
return true;
}
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
return true;
}
return super.onKeyDown(keyCode, event);
}
设置横屏和竖屏
在AndroidManifest.xml中配置
添加:
android:configChanges="keyboardHidden|screenSize|orientation"
在你所指定的activity中加上android:screenOrientation即可,下面是一些参数:
- unspecified:默认值,由系统决定
- landscape:强制横屏显示
- portrait:强制竖屏显示
- behind:与前一个activity方向相同
- sensor:根据物理传感器方向转动
- sensorLandscape:横屏旋转(一般横屏游戏会这样设置)
- sensorPortrait:竖屏旋转
- nosensor:旋转设备时候,界面不会跟着旋转(初始化界面方向由系统控制)
- user:用户当前设置的方向(推荐)
在Java代码中设置
- 设置横屏:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- 设置竖屏:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
假设当前是横屏,会把已经横屏的屏幕旋转180°。
所以我们先要做一个判断,再执行旋转屏幕操作:
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
新建横屏布局:
- 在res目录下新建Android Resource Directory
- 选择layout > Orientation
- 选择横屏Landscape
设置无标题:
requestWindowFeature(Window.FEATURE_NO_TITLE);
去标题栏更简单的方法:直接继承Activity类即可
设置全屏:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
注意:要放在setContentView()方法前面!
打开TXT文件读权限:
写权限:
Java代码:
File f = new File("/storage/emulated/0/Download/test.txt");
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(f);
br = new BufferedReader(fr);
String tmp;
int i = 1;
while ((tmp = br.readLine()) != null) {
System.out.println("D" + i + ":" + tmp);
i++;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
字符串分割:str.split(',')
判断字符串是否相等:str.equal("str")
判断文件是否存在File file = new File("/storage/emulated/0/Download/test.txt");
if (!file.exists()){
Toast.makeText(this, "/storage/emulated/0/Download/test.txt 文件不存在", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "文件存在", Toast.LENGTH_SHORT).show();
}
判断是否有权限
if (ActivityCompat.checkSelfPermission(this, "android.permission.READ_EXTERNAL_STORAGE") != PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "没有存储权限", Toast.LENGTH_SHORT).show();
}
解决连接手机无法调试的问题
编辑gradle.properties文件,添加:
android.injected.testOnly=false随机数
Random类
语法:
Random r = new Random();
- nextInt():返回随机int值
- nextLong():返回随机long值
- nextDouble():返回随机double值
- nextFloat():返回随机float值
- nextBoolean():返回随机boolean值
范围:
0 <= nextInt(int n) < n
Math.random()
Math.random()范围:0<=double值<1
同理可得:
Math.random()*m范围:0<=double值 实例:获取0-100的随机数int num = (int)(Math.random()*100);


![[Android]一些笔记 [Android]一些笔记](http://www.mshxw.com/aiimages/31/866597.png)
