【前台学习】AndroidStudio使用及安卓基础

基本布局

image.png

Java文件夹

Res文件夹

  1. 图片资源放drawable然后导入图片视图的时候就会自动提示
  2. 所有文字放常量,使用@string去引用内容,方便国际化和统一控制
  3. 文字处可以点击右边选择res-values内容常量也可以直接add new新建进去

基础操作

xml视图控件操作

ConstraintLayout说明

  1. 单个控件:

每个控件都需要水平竖直方向定位至少一个点,
可以选择 1. 右下角的上下左右 2. 直接拖拽控件 3. 上方魔法棒自动定位

  1. 多个控件【聚合、扩散、对齐方法】

圈选后右键[align、pack]或者
圈选后上方多出 Pack,选择模式[垂直聚合,水平聚合,垂直扩散,水平扩散]
快速自动布局多个控件;
旁边还有个align对齐按钮同样使用(但都是对于没有约束的控件)
image.png
layout_width的几种模式

使用辅助线百分比控制不同设备不溢出
用辅助线百分比 控件宽度填充设计自适应界面,I切出辅助线点击左边切换形式至百分比即可

多设备适配[横屏、竖排双布局]

点击左上角的旋转按钮,create new land就行了,activity_main下面会多一个(land)

其他

导入矢量图标 new vector asset即可
矢量图可以随便放大格式是xml

代码基础

MainActive事件

启动时:onCreate + onStart + onResume(正在运行)
返回主界面:onPause + onStop
重新进入:onRestart + onStart + onResume
杀死进程:onDestory
旋转屏幕会杀死重新进入

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("系统创建");
    }

    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("刚刚开始");
    }
    
    等等
}

控件代码获取

R.id.$ 可以获取组件id的数值 配合 findViewById使用
R.string.$ 可以获取字符常量


//TextView获取操作
TextView texView;
Button button1,button2;
textView = findViewById(R.id.textView1);
button1 = findViewById(R.id.button1);
//添加按钮监听器
button1.setOnClickListener( new View. OnClickListener() {
    @Override
    public void onClick(View view) {
    	textView. setText ("左边") ;
    }
});

本地化及多语言支持

strings.xml选择右上open Edit后选择地球图标直接选择语言就能多出以列去写新的语言翻译了

LivingData&&dataBinding

LivingData
创建对象继承viewModel然后里面的对象存放在MutableLiveData容器里面

public class MyViewModel extends ViewModel {
    private MutableLiveData<Integer> count;
    public MutableLiveData<Integer> getCount() {
        if (count == null) {
        count = new MutableLiveData<>();
        count.setValue(0) ;
        }
        return count;
    }
    public void add(int p){
    	count.setValue(count.getValue() + p);
    }
}

dataBinding
主要目的是让数据存储下来 以及双向绑定
首先再build.gradle(app)里面default下面添加

dataBinding {
     enabled true
}

然后layout.xml里面添加ait + 回车 convert to dataBinding即可更改xml视图格式多出标签,其中填写LivingData对象就能完成数据的双向绑定,就不需要用java代码去根据id获取xml里面的控件然后再改内容,直接通过xml和LivingData(类)进行数据交互;

<data>
	<variable
	name= "data" type="com.example.viewmodelrestore.MyViewModet" />
</data>

主函数内将livingData 和 dataBinding进行绑定

public class MainActivity extends AppCompatActivity {
    MyViewModel myViewModel; //LivingData对象
    ActivityMainBinding binding;  //dataBinding对象
    @Override
    protected void onCreate( Bundle savedInstanceState) {
        super.onCreate( savedInstanceState);
        //将layout绑定到dataBinding
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        //实体化livingData
        myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
        //绑定
        binding.setData(myViewModel);
        //设置对象
        binding.setLifecycleOwner(this);
    }
}

然后通过xml控制控件数据就行,如下,就绑定了数据以及点击事件

android:text="@{String.valueOf(data.getCount())}"
android:onClick="@{()->data.add()}"

viewModelStateSave实现杀死进程数据仍然存在

先在build.grade(app)下dependencies里面添加

implementation ‘androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01’

然后改造使用handle; key-value形式

public class MyViewModel extends ViewModel {
    private SavedStateHandle handle;

    public MyViewModel(SavedStateHandle handle){
        this.handle = handle;
    }
    public MutableLiveData<Integer> getCount() {
        if (!handle.contains("count")) {
            handle.set("count",0);
        }
        return handle.getLiveData("count");
    }
    public void add(){
        getCount().setValue(getCount().getValue() + 1);
    }
}

创建的时候记得带上参数savedState,new SavedStateVMFactory(this))创建即可
myViewModel = ViewModelProviders.of(this,new SavedStateVMFactory(this)).get(MyViewModel.class);

SharedPreferences本地持久化存储

[基于前面两个配置实现]反正就是拿一个类基础AppCompatActivity直接控制存key-value到本地xml里面
data-data-找到包下面就能看到本地文件,存储使用onPause(),不适用destory或者stop它们经常被跳过
修改实体类直接实现实体类存储;其他不变
image.png

package com.example.myapplication;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;

import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.SavedStateHandle;
import androidx.lifecycle.ViewModel;

public class MyViewModel extends AndroidViewModel {
    private SavedStateHandle handle;
    public MyViewModel(@NonNull Application application) {
        super(application);
        this.handle = handle;
        if (!handle.contains("count")) {
            load();
        }
    }
    public LiveData<Integer> getCount() {
        return handle.getLiveData("count");
    }
    private void load() {
        SharedPreferences shp = getApplication().getSharedPreferences("file_name", Context.MODE_PRIVATE);
        handle.set("count",shp.getInt("count",0));
    }
    public  void save() {
        SharedPreferences shp = getApplication().getSharedPreferences("file_name", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = shp.edit();
        editor.putInt("count",getCount().getValue());
        editor.apply();//提交
    }

    public  void add(int x){
        handle.set("count",getCount().getValue() + x);
    }
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android Studio使用图库,你可以按照以下步骤进行操作: 1. 首先,在你的AndroidManifest.xml文件中添加读取外部存储权限的声明。你可以使用以下代码添加权限声明: 2. 在你的build.gradle文件中添加RecyclerView的依赖库。你可以使用以下代码添加依赖: 3. 在你的布局文件中,添加一个按钮或者ImageView,用于触发选择图片的操作。 4. 在你的Java代码中,为按钮或ImageView设置点击事件监听器。在点击事件中,使用以下代码打开图库: ```java Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, PICK_IMAGE_REQUEST_CODE); ``` 5. 在Activity中重写onActivityResult方法,获取选中的图片URI,并进行处理。 ```java @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == PICK_IMAGE_REQUEST_CODE && resultCode == RESULT_OK && data != null) { Uri imageUri = data.getData(); // 进行图片处理操作,比如显示到ImageView中 } } ``` 这样,当你点击按钮或ImageView时,会打开图库供你选择图片,选择完成后会返回选中的图片URI,你可以对该URI进行进一步的处理,比如显示到ImageView中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [实验七 Android Studio Intent相机图库读取照片【班级名单列表视图03】](https://blog.csdn.net/qq_45037155/article/details/124927235)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [安卓期末大作业(AndroidStudio开发),垃圾分类助手app,分为前台后台,代码有注释,均能正常运行](https://download.csdn.net/download/weixin_59538558/87860202)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

404name

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值