标题Android Studio学习

1.活动的基本用法

1.新建一个活动,会有主函数和其相对布局。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f2IFw9Zb-1607841793173)(C:\Users\23737\AppData\Roaming\Typora\typora-user-images\image-20201028145313072.png)]

上面的图片就是在setContenView()中添加我们自主创建的一个活动ID;

2.在AndroidMainfirst文件中注册活动

 * **所有的活动都需要在AndroidMainfirst文件中进行注册才能生效**,配置活动的方法:在<activity>的标签内部加入<intent-filter>标签,并且在标签里面添加
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nflstSfh-1607841793177)(C:\Users\23737\AppData\Roaming\Typora\typora-user-images\image-20201028150111330.png)]

  • 这串代码相当于把fFirstActivity设置为主活动(即点击桌面应用程序图标时,打开的就是这个活动),打开一个空活动时,标题栏下面的就是在layout中编写的界面。

3.在活动中使用Toast

 * 首先需要定义一个弹出Toast的触发点,首先在layout中创建一个button按钮,把这个按钮当做Toast的触发点,实现效果是:当你点击button时,页面会弹出一个提醒方式。* 在onCreate()方法中添加如下代码:
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.first_layout);Button button1 = (Button) findViewById(R.id.button_1);button1.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {Toast.makeText(FirstActivity.this, "you clicked button 1",Toast.LENGTH_SHORT).show();}});
* 在活动中可以通过findViewByID()的方法来获取到布局文件中定义的元素,首先需向下转型把button变成Button的实例化对象。setOnClickListener()为按钮注册了一个监听器,点击按钮就睡执行onClick中的功能。所以,弹出提示Toast的功能代码就在onClick函数中书写了。makeText方法中有三个参数,第一个是Context的对象,直接导入主活动就行;第二个参数是Toast中的显示的内容;第三个参数是显示时长,有两个内置常量可以选择,Toast.LENGTH_SHORE    Toast.LENGTH_LONG

4.在活动中使用菜单MENU

​ 1.首先要在res目录下面新建一个menu文件夹,然后在这个文件夹下面创建一个名为main的菜单文件。然后再main.xml中添加代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/add_item"android:title="Add"/><itemandroid:id="@+id/remove_item"android:title="Remove"/>
</menu>
  • 这里创建了两个菜单项,title就是给具体的菜单项一个标识符。创建完成后需要在返回FirstActivity中重写onCreateOptionsMenu()和onOptionsItemSelected()方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main,menu);return true;
}@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {switch (item.getItemId()) {case R.id.add_item:Toast.makeText(this, "雪宝儿最美",Toast.LENGTH_SHORT).show();break;case R.id.remove_item:Toast.makeText(this, "凯哥哥最帅",Toast.LENGTH_SHORT).show();break;default:}return true;
}
  • onOptionsItemSelected()方法中定义的是菜单响应事件,item.getItemId()是用来判断点击的是哪一个具体的菜单事项,然后在每个菜单事项下面添加自己的逻辑代码。

  • 多种菜单的创建:

  • <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:title="listview效果显示"android:id="@+id/list_view"><menu><itemandroid:title="垂直标准"android:id="@+id/listview_vertical_stander"></item><itemandroid:title="垂直反向"android:id="@+id/listview_vertical_reverse"></item></menu></item><itemandroid:title="grad_view效果显示"android:id="@+id/grad_view"><menu><itemandroid:title="垂直标准"android:id="@+id/gradview_vertical_stander"></item><itemandroid:title="垂直反向"android:id="@+id/gradview_vertical_reverse"></item></menu></item><itemandroid:title="瀑布流效果显示"android:id="@+id/stagger_view"><menu><itemandroid:title="垂直标准"android:id="@+id/stagview_vertical_stander"></item><itemandroid:title="垂直反向"android:id="@+id/stagview_vertical_reverse"></item></menu></item>
    </menu>
    
  • onCreateOptionsMenu()和onOptionsItemSelected()方法与普通菜单方法无异,第一个是加载菜单(将菜单布局添加至主布局中),第二个方法用来添加菜单的事件,里面可以添加一些逻辑事件。

5.使用intent在各个活动中穿梭

  • 首先需要创建一个新的活动,但是不要将其设置为主活动。个人比较喜欢用显示intent,所以直接记录显示intent的用法。

  • 首先先创建一个intent,传入FirstActivity作为上下文,传入ThirdActivity作为目标活动,然后通过startActivity(intent2)就可以执行这个intent了。

  • button1.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {Intent intent = new Intent(FirstActivity.this,ThirdActivity.class);startActivity(intent2);}
    });
    

6.LinearLayout 布局文件模板:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"></LinearLayout>

7.修改APP名字和图标

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bQpsO5co-1607841793180)(C:\Users\23737\AppData\Roaming\Typora\typora-user-images\image-20201127135349146.png)]

android:icon="@mipmap/app_fengmian" //在这个里面修改图标
android:label="@string/app_name" //在这个里面修改名字

2.Ui开发控件知识

1.TextView

  • textview就是很简单的文本显示,在layout中编辑

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dv3DI8M8-1607841793182)(C:\Users\23737\AppData\Roaming\Typora\typora-user-images\image-20201028154138702.png)]

android:id = "@+id/text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="hello world"
  • layout_width和layout_height制定了控件的宽度和高度,安卓中所有的控件都有这些属性。match_parent指让当前控件的大小和父布局一样,也就是由父布局来决定当前控件的大小,wrap_content表示让当前控件的大小能刚好包含其中的内容android:gravity="center"表示文字的对齐方式,指定center就是文字在水平和垂直方向上都是居中对齐的。至于字体的大小和颜色,自己考虑。

2.EditText

<EditTextandroid:id="@+id/editText1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="1dp"android:layout_marginTop="0dp" />
  • 可以输入内容,文本输入框。

  • hint属性就是一个比较高端的属性,它可以在文本输入框内显示提示(在输入内容之前),在输入内容时,这个提示就会消失。

  • 特殊属性:singleLine 是单行输入、inputtype是输入类型,设置为textPassWord就是密码类型,输入的时候显示安全键盘

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gOXsS25O-1607841793184)(C:\Users\23737\AppData\Roaming\Typora\typora-user-images\image-20201103094303050.png)]

  • 账号密码匹配代码:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxOvMx2I-1607841793186)(C:\Users\23737\AppData\Roaming\Typora\typora-user-images\image-20201103095744780.png)]

3.ImageView

<ImageViewandroid:id="@+id/imageView2"android:layout_width="149dp"android:layout_height="222dp"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:layout_marginLeft="100dp"android:layout_marginTop="89dp"android:layout_marginRight="100dp"app:srcCompat="@drawable/jingerjie" />
  • src属性就是从drawle中调用图片的,给ImageView指定了一张图片

4.button

<Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/button_1"android:text="报君黄金台上意,提携玉龙为君死"android:background="@android:color/transparent"android:textSize="25sp"android:textColor="#000000"/>

尤其注意, android:background="@android:color/transparent"这串代码可以让按钮的背景颜色改成透明,以后再软件美化中可以用到


  • button按钮的实现:

    Button button = findViewByid(R.id.button_1);
    button.setOnClickListener(new View.OnClickListemer(){public void onClick(View view) {});
    
  • intent 跳转的实现;

    Intent intent3 = new Intent(FirstActivity.this,ForthActivity.class);startActivity(intent3);
    

1.拖动条(progressBar)

  • **1.**自己理解就是一个简单的控件而已,至于进度条想什么时候走完没所谓,反正是做假的。在.xml文件中直接定义就行

  • <ProgressBarandroid:id="@+id/pb"style="@android:style/Widget.ProgressBar.Horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"android:max="100"android:progress="60" />
    
  • android:max : 进度条的最大值

    android:progress : 进度条的精度,自己定义的(所以我说都是假的)

    android:indeterminate : 如果设置为true,就是不显示进度条的精度

    style : 就是设置进度条的样式,是什么类型的,大或小,圆形或者水平(安卓自带样式)

    **2.**实现一个进度条的进度(自动和手动两种方式)

    • 自动:

    • public class ProgressBarActivity extends AppCompatActivity implements View.OnClickListener {private int currentProgress = 0;private ProgressBar progressBar;private int maxProgress;private Handler mHandler = new Handler(){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);switch (msg.what){case 0 :progressBar.setProgress(currentProgress);break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_progress_bar);progressBar = findViewById(R.id.pb);maxProgress = progressBar.getMax();mtu_pb = findViewById(R.id.pb_mtu);}@Overrideprotected void onStart() {super.onStart();new Thread(){@Overridepublic void run() {while(true){try {for(int i=0; i<=100; i++){Thread.sleep(1000);currentProgress += 10;if(currentProgress > maxProgress){break;}mHandler.sendEmptyMessage(0);}}catch (InterruptedException e){e.printStackTrace();}}}}.start();}
      

      1.可以实现进度条的自动加载,运用多线程的相关知识;

    • 手动:

    • public class ProgressBarActivity extends AppCompatActivity implements View.OnClickListener {private ProgressBar progressBar_try;private Button mtu_pb;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_progress_bar);progressBar_try = findViewById(R.id.pb_try);mtu_pb.setOnClickListener(this);
      }
      @Overridepublic void onClick(View view) {switch (view.getId()){case R.id.pb_mtu:int progress = progressBar_try.getProgress();progress += 10;progressBar_try.setProgress(progress);break;default:break;}}
      }
      

      可以实现进度条的手动加载,按动一次按钮,就可以实现进度条的一次加载,每次加载10%

2.拖动条seekbar

  • 首先在layout布局文件中创建拖动条

  • <SeekBarandroid:id="@+id/sb_norbal"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/txt_cur"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:layout_gravity="center"android:textSize="30sp"/><SeekBarandroid:id="@+id/sb_custom"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:maxHeight="10dp"android:maxWidth="5dp"android:progressDrawable="@mipmap/fnegmain"android:thumb="@color/colorPrimary"/>
    
  • android:progressDrawable是拖动条的样式,可以放自己喜欢的图片和背景;android:thumb是拖动后显示的背景和颜色。

  • .java文件中,seekbar点击事件有三个方法,第一个是进度条改变,第二个是点击拖动条,第三个是松开进度条

  • protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_seek_bar);mContext = this;sb_normal = findViewById(R.id.sb_norbal);sb_custom = findViewById(R.id.sb_custom);txt_cur = findViewById(R.id.txt_cur);sb_normal.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Override//第一个参数是seekbar的对象,第二个是进度条的值,第三个是是否进度条的值有改变public void onProgressChanged(SeekBar seekBar, int i, boolean b) {txt_cur.setText("当前进度值: "+ i +" / 100" );}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {Toast.makeText(mContext,"触碰SeekBar",Toast.LENGTH_SHORT).show();}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {Toast.makeText(mContext,"松开SeekBar",Toast.LENGTH_SHORT).show();}});}
    

5.RadioGroup && RadioButton

  • RadioButton 实际上就是一个选框而已,不过如果没有RadioGroup的存在,RadioButton可以进行多项选择,但是如果存在RadioGroup的制约,它就从多选框变成了单选框。

  • RadioGroup rg = findViewById(R.id.radiugroup);rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){@Overridepublic void onCheckedChanged(RadioGroup radioGroup, int i) {switch (i){case R.id.button_1:Log.d("onCheckedChanged","add");Toast.makeText(ThirdActivity.this,"you clicked add",Toast.LENGTH_LONG).show();break;case R.id.button_2:Log.d("onCheckedChanged","delete");Toast.makeText(ThirdActivity.this,"you clicked delete",Toast.LENGTH_LONG).show();break;default:break;}}});
    
  • 用法和button按钮的基本一样,只是在设置点击事件的时候略有不同,自己注意体会。

  • RadioGroup && RadioButton的嵌套使用如下:

  • <RadioGroupandroid:id="@+id/radiugroup"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="delete"android:textAllCaps="false"android:textSize="30sp"android:id="@+id/button_2"></RadioButton><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="add"android:textAllCaps="false"android:textSize="30sp"android:id="@+id/button_1"></RadioButton></RadioGroup>

6…CheckBoxs复选框的实际应用

  • CheckBoxs是复选框,和RadioGroup && RadioButton没什么太大的区别

  • <CheckBoxandroid:id="@+id/check_basket"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="篮球"/>
    
  • cb_basket = findViewById(R.id.check_basket);cb_basket.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton compoundButton, boolean b) {Intent intent = new Intent(ThirdActivity.this,MainActivity.class);startActivity(intent);}});
    
  • 以上代码就是在实际开发中对复选框的运用***数据类型是boolean类型***

7.对话框的实际应用

  • public class ThirdActivity extends AppCompatActivity implements  View.OnClickListener{Button button2 = findViewById(R.id.button_adalog);button2.setOnClickListener(this);@Overridepublic void onClick(View view) {AlertDialog.Builder builder = new AlertDialog.Builder(ThirdActivity.this);switch (view.getId()){case R.id.button_adalog:builder.setTitle("对话框");builder.setMessage("今晚喝酒吗");builder.setCancelable(false);builder.setPositiveButton("走", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {Toast.makeText(ThirdActivity.this,"你也配喝酒",Toast.LENGTH_LONG).show();}});builder.setNegativeButton("不去,我要敲代码", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {Toast.makeText(ThirdActivity.this,"好小子!",Toast.LENGTH_LONG).show();}});break;case R.id.button_adalog2:builder.setTitle("单选对话框");builder.setIcon(R.mipmap.ic_launcher);builder.setSingleChoiceItems(new String[]{"好的,一起吧。","不,我要当废物。","都行"}, 0, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {Toast.makeText(ThirdActivity.this,"选中的",Toast.LENGTH_SHORT).show();}});break;}builder,show();}
    }
  • 上述代码是.java文件里面的所属代码,首先函数名不仅仅需要继承AppCompatActivity,想要使用 AlertDialog,函数名还要继承View.OnClickListener接口,然后在函数中覆写onClick函数,以此表示按钮的点击事件。

  • 在layout 布局文件中,则是直接创建一个按钮即可。

  • onClick覆写中,上述代码使用switch-case语句是因为有单选对话框的存在,必须要判断点击的是那个按钮,然后才能实现相关功。在对应的case语句下面编写其逻辑代码。

8.listview的使用

<ListViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:fastScrollEnabled="true"android:id="@+id/lv_main"></ListView>
  • 首先需要创建一个布局,在里面添加一个listview,宽度高度自己调整,记得控件必须添加一个id

  • 然后在.java文件中添加实现listview的代码

  • public class ListViewTry extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_list_view_try);ListView lv = findViewById(R.id.lv_main);lv.setAdapter(new MyListViewAdapter());}public class MyListViewAdapter extends BaseAdapter{private TextView tv;@Overridepublic int getCount() {return 100;}@Overridepublic Object getItem(int i) {return null;}@Overridepublic long getItemId(int i) {return 0;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {if(view == null){tv = new TextView(ListViewTry.this);}else{tv = (TextView)view;}tv.setText("蝌蚪!"+i);return tv;}}
    }
  • 上述代码用来实现listview效果,首先需要找到我们需要的控件ID,ListView lv = findViewById(R.id.lv_main);完成功能。然后需要向listview添加数据,这就需要自己建立一个数据类,让他继承BaseAdapter,继承里面的方法,第一个方法public int getCount()是用来实现显示几行; public View getView方法是用来显示listview中的文字。最后lv.setAdapter(new MyListViewAdapter());即可。

9.ScrollView及HorizontalScrollView

  • <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".Scrollview"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="test1"android:id="@+id/test1"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="test2"android:id="@+id/test2"/><HorizontalScrollViewandroid:layout_width="match_parent"android:layout_height="wrap_content"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:layout_width="200dp"android:layout_height="200dp"android:id="@+id/HScrollview1"android:text="Htext1"/><Buttonandroid:layout_width="200dp"android:layout_height="200dp"android:id="@+id/HScrollview2"android:text="Htext2"/></LinearLayout></HorizontalScrollView><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/text6"android:text="the last text"android:layout_marginTop="200dp"/></LinearLayout></ScrollView>
    
  • 上述代码可以知道两种滚动布局的用法,ScrollView是主布局,直接作用在布局里面,而HorizontalScrollView布局则是作用在ScrollView中,是它的子布局,嵌套在其中。前者是垂直布局,后者是水平布局。但是需要注意,两种布局下面都要用LinearLayout布局来实现,LinearLayout中可以添加控件

10.RecycleView 的使用

1.利用RecycleView实现listview

  • public class LinearRecycleViewActivity extends AppCompatActivity {private RecyclerView myrcv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_linear_recycle_view);myrcv = findViewById(R.id.rv_main);myrcv.setLayoutManager(new LinearLayoutManager(LinearRecycleViewActivity.this));myrcv.setAdapter(new LinearAdapter(LinearRecycleViewActivity.this));}
    }
    
  •     <androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_main"android:layout_width="match_parent"android:layout_height="wrap_content" />
  • 首先创建一个活动,在布局里面添加一个RecycleView。.java文件中找到所用的控件,然后设置一个布局管理器,最后设置一个数据适配器。

  • public class LinearAdapter extends RecyclerView.Adapter <LinearAdapter.LinearViewHolder>{private  Context mcontext;public LinearAdapter(Context context){this.mcontext = context;}@NonNull@Overridepublic LinearAdapter.LinearViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {return new LinearViewHolder(LayoutInflater.from(mcontext).inflate(R.layout.linear_recycle,parent,false));}@Overridepublic void onBindViewHolder(@NonNull LinearAdapter.LinearViewHolder holder, final int position) {holder.textview.setText("hello kedou");holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(mcontext,"you click the"+position,Toast.LENGTH_SHORT).show();}});}@Overridepublic int getItemCount() {return 100;}class LinearViewHolder extends RecyclerView.ViewHolder{private TextView textview;public LinearViewHolder(View itemView){super(itemView);textview = itemView.findViewById(R.id.tv_title);}}
    }
    
  • <TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="蝌蚪"android:id="@+id/tv_title"android:gravity="center"android:textSize="20sp"android:textColor="#000000"android:background="@drawable/abc_vector_test"/>
    
  • 首先创建一个布局文件,此布局文件中添加一个想要在RecycleView中显示的控件。在.java文件中,数据适配器需要继承RecycleView的适配器,然后继承相关方法。 onCreateViewHolder方法用来创建一个ViewHolder的实例,onBindViewHolder方法用来绑定布局,可以在里面添加一些逻辑事件(设置文字,显示弹窗之类的),getItemCount方法用来返回列表的长度。class LinearViewHolder extends RecyclerView.ViewHolder是用来满足适配器的泛型事件。

11Fragment的使用

1.静态加载fragment

  • public class Myfragment extends Fragment {@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {//第七行代码是用来加载布局的主要代码View view = inflater.inflate(R.layout.activity_myfragment,container,false);return view;}
    }
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OXgUSY4n-1607841793187)(C:\Users\23737\AppData\Roaming\Typora\typora-user-images\image-20201123215714037.png)]

  • <?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:orientation="horizontal"><fragmentandroid:name="com.example.frag1.Fragment.Myfragment"android:id="@+id/myfragment"android:layout_width="match_parent"android:layout_height="300dp" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="300dp"android:layout_marginTop="30dp"android:id="@+id/rl_fragment"/></LinearLayout>
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0tFz7RBp-1607841793188)(C:\Users\23737\AppData\Roaming\Typora\typora-user-images\image-20201123215800014.png)]

  • 静态加载碎片,其实是非常简单的,首先需要创建一个活动,这个类必须继承Fragment。在这个活动下面的布局里面就可以写想要在碎片中加载的东西,可以在里面添加一些简单的控件,在.java文件中,需要public View onCreateView方法来实现碎片的加载,具体请看上述代码。然后在主函数的布局中添加一个标签fragment,作为容器,直接运行即可加载碎片。

2.动态加载碎片

  • 首先创建一个活动作为主活动,在主活动的布局文件中添加一个FragLayout,作为所有碎片的容器。

  • <FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@id/ly_top_bar"android:layout_above="@id/div_tab_bar"android:id="@+id/ly_content1"android:background="@android:color/transparent"></FrameLayout>
    
  • 然后创建其他活动,在其布局文件中添加自己想要的效果,在其.java文件中重写View onCreateView方法表示添加布局。

  • 主活动需要写碎片的实现:

  • private void replacefragemnt(MyFragment_tishi myFragment_tishi){FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();//尤为重要的是,第五行的代码,碎片的被代替布局必须是在主函数中自己写的碎片容器,代替者是代替函数中活动的对象。transaction.replace(R.id.ly_content1,myFragment_tishi);transaction.commit();}
    //下面这串代码可以添加在逻辑事件中,调用replace方法,实现碎片的动态添加replacefragemnt(new MyFragment_tishi());
    

* 首先自定义一个代替方法,是将碎片中原有的事物代替成为一个新的事物(新的事物就是自己写的几个活动),然后在点击事件中调用自定义的代替方法,碎片的动态添加就可以完成。## 3.存储数据### 1.SharedPreferences数据存储* ```javaButton button2 = findViewById(R.id.button2);button2.setOnClickListener(new View.OnClickListener(){public void onClick(View v){SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();editor.putString("name","tom");editor.putInt("age",20);editor.putBoolean("married",false);editor.apply();}});
  • button按钮逻辑中实现数据的存储

  • 调用SharedPreferences对象的edit方法来获取haredPreferences.Editor对象,然后向该对象中添加数据,添加完毕后通过apply方法将数据提交,完成数据的存储。

2.从SharedPreferences读取数据

  • 此代码布局文件中使用了chrckBox复选框记住密码来实现功能操作。

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KGIRoQQl-1607841793189)(C:\Users\23737\AppData\Roaming\Typora\typora-user-images\image-20201103111410884.png)]

  • private SharedPreferences pref;private SharedPreferences.Editor editor;private CheckBox remember;
    Button button = findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {String editone = edit1.getText().toString();String edittwo =  edit2.getText().toString();if(editone.equals("2373704672") && edittwo.equals("lxswwy.1314")){editor = pref.edit();if(remember.isChecked()){editor.putBoolean("remember password",true);editor.putString("account:",editone);editor.putString("password:",edittwo);}else{editor.clear();}editor.apply();Intent intent =  new Intent(MainActivity.this,FirstActivity.class);startActivity(intent);finish();}else{Toast.makeText(MainActivity.this,"账号或密码输入有误",Toast.LENGTH_LONG).show();}}});
    
  • 按钮中实现自动存入密码功能

3.数据库SQLIte

  • SQLiteOpenHelper的其中一个使用比较多的构造方法中,里面有四个参数,第一个是context,第二个是数据库的名字,第三个是查询数据时返回一个自定义的Cursor,一般都是传入null,最后一个是版本号。

  • 首先新建一个类,继承SQLiteOpenHelper

  • public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_BOOK = "create tabke Book("+ "id integer primary key autoincrement,"+ "author text,"+ "price real,"+ "pages integer,"+"name text)";private Context mContext;public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {super(context, name, factory, version);mContext = context;}@Overridepublic void onCreate(SQLiteDatabase sqLiteDatabase) {sqLiteDatabase.execSQL(CREATE_BOOK);Toast.makeText(mContext, "create successed", Toast.LENGTH_SHORT).show();}@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {}
    }
  • 然后在主函数中加以实现

  • private MyDatabaseHelper dbhelper;
    dbhelper = new MyDatabaseHelper(this,"BookStore.db",null,1);Button button  = findViewById(R.id.button_sql);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {dbhelper.getWritableDatabase();}});
    
  • 上述代码是以按钮为操作连接,然后实现数据库的创建。

4.多媒体使用

1.通知的实现:

  • public class MainActivity extends AppCompatActivity implements View.OnClickListenerfinal int NOTIFYID = 0x123;private Button mybtu;@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mybtu = findViewById(R.id.btu_inform);mybtu.setOnClickListener(this);}@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)@Overridepublic void onClick(View view) {switch (view.getId()){case R.id.btu_inform:final NotificationManager notificationManager =(NotificationManager) getSystemService(NOTIFICATION_SERVICE);// 创建一个Notification对象Notification.Builder notification = new Notification.Builder(this);// 设置打开该通知,该通知自动消失notification.setAutoCancel(true);// 设置通知的图标notification.setSmallIcon(R.mipmap.ic_launcher);// 设置通知内容的标题notification.setContentTitle("哈哈哈哈哈哈");// 设置通知内容notification.setContentText("点击查看详情!");//设置使用系统默认的声音、默认震动notification.setDefaults(Notification.DEFAULT_SOUND| Notification.DEFAULT_VIBRATE);//设置发送时间notification.setWhen(System.currentTimeMillis());// 创建一个启动其他Activity的IntentIntent intent = new Intent(MainActivity.this, DetailActivity.class);PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);//设置通知栏点击跳转notification.setContentIntent(pi);//发送通知notificationManager.notify(NOTIFYID, notification.build());break;default:break;}}
    }
    
    • 上述代码已经有很明确的注解,此处不做阐释。DetailActivity是点击通知后跳转的页面.

    2.摄像头拍照

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"><Buttonandroid:id="@+id/take_photo"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="take photo"android:textAllCaps="false"></Button><ImageViewandroid:id="@+id/picture"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"></ImageView>
</LinearLayout>
// .java文件
public class MainActivity extends AppCompatActivity {public static final int TAKE_PHOTO = 1;private ImageView PICTURE;private Uri imageUri;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button takePhoto = findViewById(R.id.take_photo);PICTURE = findViewById(R.id.picture);takePhoto.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {File outputImage = new File(getExternalCacheDir(),"output_image.jpg");try{if(outputImage.exists()){outputImage.delete();}outputImage.createNewFile();}catch (IOException e){e.printStackTrace();}if (Build.VERSION.SDK_INT >= 24){imageUri = FileProvider.getUriForFile(MainActivity.this,"com.example.cameraalbumtest.fileprovider",outputImage);}else {imageUri = Uri.fromFile(outputImage);}//启动相机程序Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);startActivityForResult(intent,TAKE_PHOTO);}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {switch (requestCode){case TAKE_PHOTO:if (requestCode == RESULT_OK){try{//将拍摄的照片显示出来Bitmap bitmap =BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));PICTURE.setImageBitmap(bitmap);}catch (FileNotFoundException e){e.printStackTrace();}}break;default:break;}}
}

调取系统相册

新增一个方法

public void openGallery() {Intent intent = new Intent(Intent.ACTION_PICK);intent.setType("image/*");startActivityForResult(intent, CROP_PHOTO);}

把按钮的点击事件改为:

 @Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.take_photo://openCamera(this);openGallery();break;}}

因为这里请求码为CROP_PHOTO,因此对上边的CROP_PHOTO做些改造

 @Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case TAKE_PHOTO:...break;case CROP_PHOTO:if (resultCode == RESULT_OK) {try {if(data != null) {Uri uri = data.getData();imageUri = uri;}Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));picture.setImageBitmap(bitmap);} catch (FileNotFoundException e) {e.printStackTrace();}}break;default:super.onActivityResult(requestCode, resultCode, data);break;}}

安卓基础学习(从头开始,持续更新)相关推荐

  1. 幻樱の安卓开发学习笔记(持续更新)

    安卓开发手册Java . 前言 . 本篇博客是我在开发过程中遇到的一些问题,我将这些问题记录了下来,以防踩重复的坑,希望对需要学习或者来看我踩坑的人有所帮助. . . . . 零.一些常用的依赖 1. ...

  2. MySQL基础学习笔记(持续更新中)

    一.MySQL基础 1. 数据库概念 1.1 为什么要学MySQL 个人理解:随着互联网的发展,数据变得烦杂,冗余,量大,为了保证数据的持久性以及健壮性等等,同时也为了方便人们很好的处理数据,这就发明 ...

  3. 005-PS基础学习笔记记录-持续更新

    admin@admindembp 001-基础学习笔记 % tree -N -L 1 . ├── 000-Adobe全套系列-破解软件下载.md ├── 001-平面设计接单地址.md ├── 002 ...

  4. python课程知识点总结(循环结构~列表)(0基础学习,后持续更新)

    五.循环结构 1.内置函数 range函数 range的三种创建方式 只有一个参数(小括号中只给了一个数) r=range(10) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] ,默 ...

  5. 【学习笔记】【PS】基础学习篇(持续更新中...)

    [视频地址]:https://www.bilibili.com/video/BV1YW411e7n5?p=1 目录 主界面:菜单栏.选项栏.工具栏.面板 常用分辨率设置 颜色模式 像素公式 前期的常规 ...

  6. 微服务基础知识点学习笔记(持续更新)

    微服务基础知识点学习笔记(持续更新) Conrtoller层 整体包括:HTTP协议,JavaWeb三大组件(filter.servlet.listener).SpringMVC(SpringMVC的 ...

  7. NetworkX学习笔记【持续更新】

    NetworkX学习笔记[持续更新] 写在前面的话 学习资料 关于安装 写在前面的话 networkx是一个python包,用于创建.操作和研究复杂网络的结构.动态和功能.我最初是想找一找SDN路由算 ...

  8. Go语言开发学习笔记(持续更新中)

    Go语言开发学习笔记(持续更新中) 仅供自我学习 更好的文档请选择下方 https://studygolang.com/pkgdoc https://www.topgoer.com/go%E5%9F% ...

  9. Android 学习记录(持续更新)

    Android 学习记录(持续更新) 1.AndroidManifest.xml 详解: http://www.jb51.net/article/73731.htm (AndroidManifest. ...

  10. NumPy个人学习笔记【持续更新】

    NumPy个人学习笔记[持续更新] 来源:快速入门教程 - NumPy中文文档 目录 基础知识 数组的创建 打印数组 基本操作 通用函数 索引.切片和迭代 形状操作 更改数组的形状 将不同数组堆叠在一 ...

最新文章

  1. 盘点 | 2018全球人工智能突破性技术TOP10(附报告)
  2. 服务器更改IP(公网)地址后,Program Neighborhood客户端无法连接服务器
  3. 关于input file img实时预览获取文件路径的问题
  4. 关于阅读java编程思想和effective java的一些看法
  5. psql: FATAL the database system is in recovery解决
  6. java .equal_Java中的equals()
  7. 腾讯云mysql升级失败怎么办_本地连接腾讯云Mysql失败问题
  8. LightOJ - 1282 Leading and Trailing
  9. HTML5 API 浏览器支持情况检测
  10. google开源技术(部分)
  11. 图像/视频无损放大,用一个工具就够了
  12. 第一章 : JVM与体系结构
  13. 【SequoiaDB巨杉数据库】函数操作 $subtract
  14. 影子口令(影子密码)
  15. 谁说QTP不能多线程 - 当Python遇上QTP
  16. stegsolve 的安装使用
  17. 如何修改google chrome浏览器的主页
  18. 谷歌浏览器如何查css,谷歌浏览器查看编辑元素CSS样式_谷歌工具
  19. 人生里的酸甜苦辣,缺了哪样都是遗憾
  20. 范蠡《陶朱公生意经》

热门文章

  1. SystemTap介绍
  2. 粒子群算法中的罚函数matlab,第18章基于罚函数的粒子群算法的函数寻优范例.ppt...
  3. 用公众号给女朋友推送早安问候(恋爱值♥♥♥♥♥)
  4. JavaScript的隐式转换
  5. jQuery拼图滑块验证
  6. SurfaceView,TextureView,SurfaceTexture相关
  7. Unity DOTS学习 前置知识(二)
  8. pandas处理excel的制表符和换行符
  9. python二进制转为十进制-Python实现的十进制小数与二进制小数相互转换功能
  10. Android实战技巧:深入解析AsyncTask