栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

[Android]一些笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[Android]一些笔记

文章目录
    • 1.布局
    • 2.组件
    • 3.其他
      • 为组件添加点击事件
      • 字符串资源的使用
      • 在线播放MP3
      • 物理按键事件
      • 设置横屏和竖屏
      • 在Java代码中设置全屏
      • 打开TXT文件
      • 判断文件是否存在
      • 判断是否有权限
      • 解决连接手机无法调试的问题
      • 随机数

1.布局

线性布局管理器:LinearLayout

  • 垂直排列:android:orientation="vertical"
  • 水平排列:android:orientation="horizontal"
  • 居中排列:android:gravity="center"
  • 居右下角排列:android:gravity="right|bottom"
  • 设置组件分配剩余空间的权重:android:layout_weight="1"
2.组件

基本程序单元:Activity

4种状态:

  • 运行状态
  • 暂停状态(一般在弹出确认退出对话框时执行)
  • 停止状态
  • 销毁状态(强制停止)

生命周期:

  1. onCreate()
  2. onStart()
  3. onResume()(开始运行)
  4. onPause()
  5. onStop()(可通过onRestart()返回onStart())
  6. onDestroy()

创建、启动和关闭Activity:

(也可以直接右键包通过Android Studio新建Activity)

  1. 创建继承自Activity的Activity

    public class MainActivity extends Activity{
        //...
    }
    
  2. 重写需要回掉的方法

    public class MainActivity extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    }
    
  3. 设置要显示的视图

    public class MainActivity extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);//设置布局
        }
    }
    
  4. 在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()方法
3.其他 为组件添加点击事件

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

新建横屏布局:

  1. 在res目录下新建Android Resource Directory
  2. 选择layout > Orientation
  3. 选择横屏Landscape
在Java代码中设置全屏

设置无标题:

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);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号