久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

再次快速入門編寫APP

 beginnow1 2022-09-22 發(fā)布于廣東
好幾年前學(xué)了java編寫過一個(gè)類似微信聊天界面的,,聊天機(jī)器人,。當(dāng)時(shí)學(xué)完java已經(jīng)就沒耐心從頭開始學(xué)安卓了,就直接了解個(gè)基礎(chǔ)的東西,,再需要什么API,,實(shí)現(xiàn)方法,,直接百度東拼西湊完成了自己的第一個(gè)圖靈+百度語音APP,,我的android分類里有相關(guān)文章,,有興趣可以去看看。現(xiàn)在可好當(dāng)初沒記錄現(xiàn)在都忘光光了,,java也基本忘了,。搭建環(huán)境還是挺簡(jiǎn)單的,主要還是網(wǎng)絡(luò)問題,,能有個(gè)好的代理網(wǎng)站就簡(jiǎn)單了,,教程也很多就不講了

先從基本的android代碼結(jié)構(gòu)開始吧,推薦網(wǎng)頁

https://blog.csdn.net/weixin_49770443/article/details/116935303

故嶼

工程項(xiàng)目三個(gè)重要文件:

1.MainActivity.java
2.activity_main.xml (布局文件)
3.AndroidManifest.xml (安卓配置文件)

也有對(duì)這幾個(gè)文件的基本結(jié)構(gòu)功能做了分析,,可以去看原文章

Activity活動(dòng)的生命周期

還有個(gè)值得了解的,,Activity活動(dòng)的生命周期,像是onCreate方法是點(diǎn)擊APP開始第一個(gè)進(jìn)入的,,可以寫些初始化的操作,。但是控件之類的,在setContentView(R.layout.activity_main);方法之后才能調(diào)用,,不然組件都沒加載就用,,會(huì)導(dǎo)致閃退,沒有相應(yīng)權(quán)限調(diào)用方法一樣會(huì)閃退,,別問我為什么知道的。

Android Activity 生命周期的狀態(tài)圖,。

https://developer.android.google.cn/guide/components/activities/activity-lifecycle

所以首先需要聲明好權(quán)限,,我這就不多說了,我另一篇有講以藍(lán)牙的為例,。

搭建APP界面

了解完基礎(chǔ)知識(shí)之后,,就可以開始搭建APP啦,點(diǎn)擊AndroidManifest.xml開始布局自己的界面,我還是習(xí)慣用右上角的design界面,,直接編輯界面,,這才是編輯前端的正確打開方式嗎,畢竟我也是新手,。

有兩個(gè)比較使用的布局組件,,LinearLayout(線性布局)跟 constraintlayout(約束布局),線性布局可以在豎向或橫向的堆疊方式,,約束布局可以隨意拖拽約束跟四周控件的距離,,也十分方便,,可以在component Tree里右鍵組件添加約束條件。

比較重要的控件參數(shù)

android:id="@+id/textView"   //程序調(diào)用的入口名字

android:layout_width="match_parent"  //跟隨父類的大小

android:layout_height="wrap_content" //自適應(yīng)大小

android:layout_weight="0.8"   //控件大小的占比,,

//適合多控件之間分配比例,,來適應(yīng)不同屏幕

我的app界面代碼如下,類似聊天窗口,,我是用來做藍(lán)牙調(diào)試助手的,。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas./apk/res/android"
    xmlns:app="http://schemas./apk/res-auto"
    xmlns:tools="http://schemas./tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">



    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="80dp"
        android:lineSpacingExtra="2dp"
        android:fadeScrollbars="false"
        android:scrollbars="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />



    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:orientation="horizontal"
        app:layout_constraintBottom_toBottomOf="parent">

        <EditText
            android:id="@+id/editText"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:autofillHints=""
            android:hint="@string/editText"
            android:textColorHint="#757575" />

        <Button
            android:id="@+id/sentButton"
            android:layout_width="120dp"
            android:layout_height="match_parent"
            android:layout_marginBottom="0dp"
            android:text="@string/sent" />
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

常用組件控件

常用的組件有Button(按鍵)、TextView(文本框),、EditText(編輯框),、ListView(列表視圖)

控件都需要先聲明,再初始化,,就可以調(diào)用相應(yīng)控件方法啦,。

    Button sentButton;
    TextView textView;
    EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sentButton = (Button) findViewById(R.id.sentButton);
        textView = (TextView) findViewById(R.id.textView);
        editText = (EditText) findViewById(R.id.editText);
        //按鍵監(jiān)聽
        sentButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                //按鍵按下處理代碼
            }
        });

在界面代碼也看到,我在TextView里加了這兩行代碼,,

android:fadeScrollbars="false"    //顯示滾動(dòng)條

android:scrollbars="vertical"       //垂直方向滾動(dòng)

再程序里面加上一句,,textView.setMovementMethod(ScrollingMovementMethod.getInstance());  //設(shè)置滾動(dòng)

便能實(shí)現(xiàn)TextView的文本過多滾動(dòng)顯示

最后貼上MainActivity.java的代碼

package com.example.bt_communication;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.pm.PackageManager;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;

import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    //先聲明,實(shí)例化
    Button sentButton;
    TextView textView;
    EditText editText;

    //textview實(shí)現(xiàn)消息自動(dòng)滾動(dòng)
    private void refreshScrollPosition(){
        int line = textView.getLineCount();
        if (line > 33) {//超出屏幕自動(dòng)滾動(dòng)顯示(33是當(dāng)前頁面顯示的最大行數(shù))
            //textView.getLineHeight(),中文跟字母的高度大小不一致,,中文會(huì)有位置不對(duì)的bug
            int offset = textView.getLineCount() * textView.getLineHeight();
            textView.scrollTo(0, offset - textView.getHeight() );
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //控件初始化,匹配控件ID
        sentButton = (Button) findViewById(R.id.sentButton);
        textView = (TextView) findViewById(R.id.textView);
        editText = (EditText) findViewById(R.id.editText);
        textView.setMovementMethod(ScrollingMovementMethod.getInstance());  //設(shè)置滾動(dòng)
        //確認(rèn)權(quán)限
        Permission permission = new Permission();
        permission.checkPermissions(this);

        //按鍵監(jiān)聽
        sentButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                String inputText = editText.getText().toString();
                textView.setText(inputText);   //直接設(shè)置覆蓋文本框的內(nèi)容
                Toast.makeText(MainActivity.this, inputText, Toast.LENGTH_SHORT).show();  //彈出文本通知
                Log.d(TAG,"inputText:" + inputText + '\n');  //打印debug類型的log
                textView.append(inputText + '\n');  //將文本添加到文本框加換行
                refreshScrollPosition();
            }
        });
    }

    //權(quán)限申請(qǐng)聲明
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == Permission.RequestCode) {
            for (int i = 0; i < grantResults.length; i++) {
                if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                    Log.e("p","拒絕的權(quán)限名稱:" + permissions[i]);
                    Log.e("p","拒絕的權(quán)限結(jié)果:" + grantResults[i]);
                    Log.e("p","有權(quán)限未授權(quán),,可以彈框出來,讓客戶去手機(jī)設(shè)置界面授權(quán),。,。。");
                }else {
                    Log.e("p","授權(quán)的權(quán)限名稱:" + permissions[i]);
                    Log.e("p","授權(quán)的權(quán)限結(jié)果:" + grantResults[i]);
                }
            }
        }
    }

}

最后可以用android studio下方的Logcat來調(diào)試自己的代碼,,log.d之類的方法會(huì)打印信息在里面

1,、選上自己的程序(默認(rèn)選上還是會(huì)跑出一堆系統(tǒng)的打印的)

2、可以選上不同的打印類型,,可是還會(huì)打印更高級(jí)的log信息

3,、選擇不同的過濾方式,也可以自定義

  

問題:Attempt to invoke virtual method '.......' on a null object reference

出現(xiàn)空指針的話,,確定初始化的步驟是否正確,,控件findViewById初始化需要在onCreate函數(shù)里,而且而且在setContentView(R.layout.activity_main);之后,。

    Button sentButton;
    TextView textView;
    EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sentButton = (Button) findViewById(R.id.sentButton);
        textView = (TextView) findViewById(R.id.textView);
        editText = (EditText) findViewById(R.id.editText);
        sentButton.setcgListener(new View.cgListener() {
            @Override
            public void cg(View view) {

            }
        });

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多