Android学习(一)

Android简介

Android智能操作系统,主要手机,其他还有TV,穿戴设备,汽车等。

Android架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3XdsLEVp-1665745053825)(C:\Users\Administrator\Documents\Tencent Files\1634866331\FileRecv\Android系统架构.png)]

APP:包含系统应用,第三方应用。使用java语言开发。

Framework:API,提供给APP层开发的各种接口,学习底层的原理和流程。使用java语言开发

LIbraries和ART:开源库,JNI的调用。C/C++实现的

​ **ART:**Android RunTime,dalvik—dvm

​ java源程序—class文件—dex文件—apk;

​ 一个应用程序,一个进程,运行在一个独立的dvm实例中

HAL:硬件抽象层(硬件的驱动),保护硬件厂家的驱动程序不被破坏,不开源。分开软件层和硬件层进行测试

Linux内核:Android基于Linux系统的,并进行优化的。用C来实现的

APP

1、Android Studio软件

2、jre

3、adk(提供Android api)后期通过SDK马纳戈尔来下载其他版本

​ platforms应用支持的Android版本

​ Platform-tools平台工具,包含adb.exe,fastbool.exe

​ build-tools编译工具

​ extra:Platforms以外的功能,尤其用于存储兼容低版本的包

4、模拟器:

​ HAXM not install 原因:1没有安装HAXM installer 2、系统不支持虚拟化 可以使用第三方模拟器:逍遥模拟器,雷电模拟器,夜神模拟器

<!--
	xmlns:命名空间,余数这个xm中可以使用的标签有哪些
-->

界面

通过 xml方式

<!--
颜色值:1、英文单词
		2、rgb 十六进制数 #ff0000红色  #ffffff白色
				#000000黑色
-->
 <TextView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="你好啊"
        android:textColor="#000000"
        android:textSize="40dp"/>

通过代码java

public class Second extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout layout =new LinearLayout(this);
        LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        layout.setLayoutParams(params);
        layout.setBackgroundColor(Color.GREEN);

        for (int i = 0; i < 5; i++) {
            TextView tv=new TextView(this);
            tv.setText("海峰智云"+i);
            tv.setTextColor(Color.rgb(255,0,0));
            tv.setTextSize(20);

        }
                setContentView(layout);
    }

}
//onCreate界面创建时要执行的代码
//1、初始化组件
//2、绑定数据
//3、绑定事件

java+xml方式

固定不变的写在xml里面

可变化的写在java里面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ThredActivity"
    android:id="@+id/parentLayout"
    android:orientation="horizontal">

</LinearLayout>
<!--
<androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>重叠

<LinearLayout>
</LinearLayout>链式结构,
-->
public class ThredActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);
        LinearLayout parentLayout=findViewById(R.id.parentLayout);


        for (int i = 0; i < 5; i++) {
            TextView tv=new TextView(this);
            tv.setText("你好");
            tv.setTextColor(Color.BLACK);

            parentLayout.addView(tv);
        }


    }

文本视图

<!--
android:orientation="horizontal"水平的
					="vertical"竖直的
文本视图
	layout_width,layout_height值
		match_parent填充满父控件
		fill_parent 填充满父控件  已过时,不建议使用
		wrap_content根据内容来填充
		自定义值:100
			px:像素
			dp:设备独立像素 density.1dp就是160densityDpi上的1px
			120dpi---0.75px
			160dpi---1px
			240dpi---1.5px
			320dpi---2px
		java 代码中使用的默认尺寸单位是px
		textColor颜色值
			1、存在的颜色值@android:color/holo_blue_dark
			2、写出十六进制的方式表示rgb #rrggbb  #rgb
				#000--黑色 #fff--白色	#50aa0000-透明
			3、
-->
//日志级别:verbose(任何信息都会输出) debug  info warn error
Log.d("类名","String");

对齐方式

<!--
	android:gravity 内容对齐方式
	left right top bottom center

android:layout_gravity 该控件本身在父控件中的对齐方式
	水平的LinearLayout,可以竖直居中
	竖直的LinearLayout,可以水平居中

内边距

<!--
	android:padding 控制和内容的间距
			paddingrRight paddingLeft paddingTop
			paddingBottom

外边距

<!--
		android:layout_margin 外边距:该控件距父控件的间距

字体大小

<!--
	textSize  sp

显示

<!--
visibility  gone:不显示,不占空间
			invisible:不可见,占空间
			visible:可见
-->

可编辑的文本框

<EditText
          android:id="@+id/contentEdt"
          android:layout_width=""
          android:layout_height=""
          android:hint=""
          android:inputType=""
       

/>
   <!--
		hint 提示文字,当text不为空的时候隐藏
		inputType校验输入数据的类型 number text phone date datetime textpassword
		
	-->

按钮

 <Button
        android:id="@+id/registerBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登录"/>
        

图片展示

<ImageView
           
           
           android:src="图片源@drawable"
           android:scaleType="">
    <!-- scaleType 缩放类型
			fitXY:缩放X和Y以适应控件的大小,可能会拉伸,失真
			ditStart 原比例缩放图片填充控件的左上部分,右下可能留白
			fiEnd 原比例缩放图片填充控件的右下部分
			fitCenter 原比例缩放图片填充控件的中间
			center 图片不缩放,取图片的中间显示到控件中,不拉伸,不失真,可能会裁剪
			centerCrop 缩放图片至填充满控件,超出的部分裁减掉
			centerInside 保持纵横比例缩小图片,以显示完整的图片
			matrix 矩阵 触摸事件缩放的时候-->
    <!--
		android:adjustViewBounds true 允许调整ImageView大小以适应所显示的图片
	-->

点9图主要用在背景上

文本监听

//editText
EditText contentEdt=findViewById(R.id.contentEdt)
//addTextChangedListener 文本变化监听器
//限制文本框输入长度6
    contentEdt.addTextChangedListener(new TextWatcher() {//接口实现
           @Override
           public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
               
           }

           @Override
           public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

           }

           @Override
           public void afterTextChanged(Editable editable) {

           }
       });

按钮

 Button registerBtn=findViewById(R.id.registerBtn);
 		registerBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MuiActivity2.this,"别点了",Toast.LENGTH_LONG).show();
            }
        });
单选按钮
<RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:checked="true"/>
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:checked="false"/>
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:checked="false"/>
    </RadioGroup>

java


多选按钮
<!--
	CheckBox  多选按钮

-->
		<CheckBox
            android:id="@+id/baskball"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="篮球"
            android:checked="true"/>
        <CheckBox
            android:id="@+id/football"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="足球"
            android:checked="true"/>
图标自定义
<!--android:button
	android:drawableLeft自定义图标
			
	android:background
-->

图片

	ImageView img=new findViewById(R.id.img);
	img.setImageResource(R.drawable.test)//设置src
     img,setImageDrawable(getDrawable(R.drawable.text2));
Drawable drawable=new ColorDrawable(Color.GREEN);

下拉框

<Spinner
         android:prompt="@string/"提示标题
         anroid:layout_width=""
         android:layout_hight=""
         android:spinnerMode="dialog"对话框的形式
         					"dropdown"下拉框的形式
         android:entries="@array/数组名称"/>
         
//position 选中项的索引
setSelsction()//设置默认选项
    String[] rade=getResources().getStringArray(R.array.arage)
    getSelectedItem()//获得字符串
    getSelectedItemPositon()//获得索引
    

列表视图

 <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/grade"
        android:divider="#00aa00"
        android:dividerHeight="2dp"
        android:headerDividersEnabled="true"
        android:footerDividersEnabled="true"
        android:listSelector=""
        />
<!--
	entries="@array/grade"通过数组资源指定列表项
	divider="#00aa00"分割线可颜色可图片
	dividerHeight="2dp"分割线高度
	headerDividersEnabled="true"顶部分割线
    footerDividersEnabled="true"底部分割线
	listSelector=""指定点击色
-->

java实现

 ListView lv=findViewById(R.id.vivilist);

        //通过适配器
       String[] fru={"水蜜桃","西瓜","葡萄","樱桃"};
        ArrayAdapter<String> adapt =new ArrayAdapter<>(this,android.R.layout.simple_list_item_multiple_choice,fru);
       lv.setAdapter(adapt);

自定义适配器

<ImageView
        android:id="@+id/imago"
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:layout_margin="10dp"
        android:scaleType="fitCenter"
        />
    <TextView
        android:id="@+id/textTV"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="20sp"
        android:gravity="center_vertical"
        />
//自定义一个水果
public class Fruit {
    private int img;
    private String name;

    public Fruit(int img,String name) {
        this.img = img;
        this.name=name;
    }

    public int getImg() {
        return img;
    }

    public void setImg(int img) {
        this.img = img;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

//自定义adapt
public class FruitAdapter extends BaseAdapter {
    private Context context;
    private List<Fruit> fruitlist;

    public FruitAdapter(Context context,List<Fruit> fruitList){
       this.context=context;
        this.fruitlist=fruitList;
    }
    @Override
    public int getCount() {
        return fruitlist==null?0: fruitlist.size();
    }

    @Override
    public Object getItem(int position) {
        return fruitlist.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    //获取视图
    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        //convertView当初列表项的视图
        convertView= LayoutInflater.from(context).inflate(R.layout.listview_item,null);
        ImageView im=convertView.findViewById(R.id.imago);
        TextView tv=convertView.findViewById(R.id.textTV);
        Fruit fr=fruitlist.get(position);

        im.setImageResource(fr.getImg());
        tv.setText(fr.getName());

        return convertView;
    }
}

//最后的实现
List<Fruit> frulist=new ArrayList<>();
        frulist.add(new Fruit(R.drawable.cao,"草莓"));
        frulist.add(new Fruit(R.drawable.lizhi,"荔枝"));
        frulist.add(new Fruit(R.drawable.ying,"樱桃"));
        FruitAdapter adapt=new FruitAdapter(this,frulist);
        lv.setAdapter(adapt);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cuD8l27H-1665745053827)(C:\Users\Administrator\Pictures\Saved Pictures\7.14.7.PNG)]

编辑删除

 public View getView(int position, View convertView, ViewGroup viewGroup) {
        //convertView当初列表项的视图
        hellno he=null;
        if (convertView==null){
            he=new hellno();
            convertView= LayoutInflater.from(context).inflate(R.layout.listview_item,null);
            he.im=convertView.findViewById(R.id.imago);//图片
            he.tv=convertView.findViewById(R.id.textTV);//文字
            he.delImg=convertView.findViewById(R.id.shanVie);//获得删除图片按钮
            convertView.setTag(he);//放入数据
        }else{
            he=(hellno) convertView.getTag();//删除数据
        }
        Fruit fr=fruitlist.get(position);//获得此类

        he.im.setImageResource(fr.getImg());//得到此类的图片并设置
        he.tv.setText(fr.getName());//获得此类文字并设置

        if(ediEut){//判断是否显示
            he.delImg.setVisibility(View.VISIBLE);//显示
        }else{
            he.delImg.setVisibility(View.GONE);//隐藏,不显示
        }
            he.delImg.setOnClickListener(new View.OnClickListener() {//监听图片是否被点击
                @Override
                public void onClick(View view) {
                    fruitlist.remove(position);//点击后删除此排数据
                    notifyDataSetChanged();//刷新
                }
            });

        return convertView;
    }
}
class hellno{
    ImageView im=null;
    TextView tv=null;
    ImageView delImg=null;
}


//总调度台
 Button ediBut=findViewById(R.id.efiBut);//按钮
        ediBut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String num=ediBut.getText().toString();
                if("编辑".equals(num)){
                    adapt.setEdiEut(true);//设置显示效果
                    adapt.notifyDataSetChanged();//刷新
                    ediBut.setText("完成");//把编辑字体改变成为完成字体
                }else{
                    adapt.setEdiEut(false);//设置显示效果
                    adapt.notifyDataSetChanged();
                    ediBut.setText("编辑");//把编辑字体转变成为编辑
                }
            }
        });

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yiM6yV9q-1665745053828)(C:\Users\Administrator\Pictures\Saved Pictures\7.15.3.PNG)]

日期

 <!--
     android:datePickerMode选择模式:calendar日历 spinner下拉框,默认日历方式显示
     android:calendarViewShown  日历是否显示,和spinner结合使用
     android:maxDate    可以选择的最大日期 以mm/dd/yyyy格式
    -->

    <DatePicker
        android:id="@+id/oneDay"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:datePickerMode="spinner"
        android:calendarViewShown="false"
        android:maxDate=""
        />

时间选择器

<!---
        android:timePickerMode选择模式 clock钟表(默认) spinner下拉框
    -->
    <TimePicker
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:timePickerMode="spinner"
        />
Chronometer chro =findViewById(R.id.chron);
        chro.setBase();//参考时间
        chro.setCountDown();//倒计时
        chro.setFormat();//格式化
        chro.start();//计时开始
        chro.stop();//计时结束
        System.currentTimeMillis();//系统当前的时间
        SystemClock.elapsedRealtime();//开机以来的毫秒值,包含锁屏的时间
        chro.setOnChronometerTickListener();//计时器监听器

布局方式

线性布局

LinearLayout 线性布局

​ android:orientation horizontal水平 vertical垂直

​ android:grivity gravity 子控件的整体对齐方式

android:layout_weight 子控件在父控件的占比–可以设置在任何控件中


droid:layout_height=“wrap_content”
android:timePickerMode=“spinner”
/>




```java
Chronometer chro =findViewById(R.id.chron);
        chro.setBase();//参考时间
        chro.setCountDown();//倒计时
        chro.setFormat();//格式化
        chro.start();//计时开始
        chro.stop();//计时结束
        System.currentTimeMillis();//系统当前的时间
        SystemClock.elapsedRealtime();//开机以来的毫秒值,包含锁屏的时间
        chro.setOnChronometerTickListener();//计时器监听器

布局方式

线性布局

LinearLayout 线性布局

​ android:orientation horizontal水平 vertical垂直

​ android:grivity gravity 子控件的整体对齐方式

android:layout_weight 子控件在父控件的占比–可以设置在任何控件中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值