從TextView到webView

TextView:

1.maxLines:設(shè)置行數(shù)極值

2.ellipsize:當(dāng)文本超出限制時,在何處顯示...

3.drawableRight:在文本右邊設(shè)置圖片資源(其他方向亦如此)

4.drawablePadding:給圖片資源設(shè)置內(nèi)邊距

5.代碼給文本設(shè)置中劃線:

    textview.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);

    textview.getPaint().setAntiAlias(true);//去除鋸齒

6.代碼給文本設(shè)置下劃線迎吵,兩種方式:

1)textview.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);

2)textview.setText(Html.fromHtml("<u>文本</u>"));

7.文本跑馬燈效果:兩個步驟嗤形,
1)先在布局文件中設(shè)置:

    android:singleLine="true"http://設(shè)置單行顯示
    android:ellipsize="marquee"  //跑馬燈
    android:marqueeRepeatLimit="marquee_forever" //設(shè)置一直循環(huán) 
    android:focusable="true" //設(shè)置獲取焦點
    android:focusableInTouchMode="true" //可以通過觸摸獲取焦點
    android:scrollHorizontally="true" //水平

2)代碼中設(shè)置:

    textview.requestFocus()讓控件獲取焦點精偿,不然沒效果。

Button:

1.自定義樣式:在res/drawable里新建一個xml文件,

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 

     <stroke android:width="1dp" android:color="#FF9B65"/>//邊框大小笔咽,顏色

     <solid android:color="#FF9B65"/> //按鈕填充的顏色

     <corners android:radius="5dp"/> //按鈕四個角的弧度

 </shape>

2.按鈕點擊效果:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"> //按鈕按下                                                    

         <shape>                                                                                                                

             <solid android:color="#E08904"/> 

             <corners android:radius="5dp"/> 

         </shape>

     </item>

     <item android:state_pressed="false">

         <shape> 

             <solid android:color="#FF9900"/> 

             <corners android:radius="5dp"/>

         </shape> 

     </item> 

</selector>

3.android:textAllCaps="false",不添加則英文會全部變成大寫搔预。

EditTextView:

1.基本與textview相似,一些常用屬性有(等):

hint:默認提示內(nèi)容

inputType:文本的輸入類型

digits:設(shè)置允許輸入的類型

2.監(jiān)聽事件

edittext.addTextChangedListener(new TextWatcher() {

    @Override

     public void beforeTextChanged(CharSequence s,int start,int count,int after) {

    }

    @Override

    public void onTextChanged(CharSequence s,int start,int before,int count) {

            Toast.makeText(EdittextActivity.this,s,Toast.LENGTH_SHORT).show();;

    }

    @Override

    public void afterTextChanged(Editable s) {

    }

});

RadioButton:

1.將多個radiobutton放到radiogroup中叶组,成為一個組拯田,且每個radiobutton都要有id,才能實現(xiàn)單選甩十;

2.自定義樣式:

android:button="@null"http://取出默認點擊效果

android:checked="true"http://設(shè)置為選中


//這里布局和上面的按鈕點擊效果布局類似船庇,但是要換成state_checked

android:background="@drawable/我的selector樣式"

3.監(jiān)聽事件

radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

    @Override

    public void onCheckedChanged(RadioGroup group,int checkedId) {

        RadioButton radioButton = group.findViewById(checkedId);

        Toast.makeText(RadioButtonActivity.this,radioButton.getText(),Toast.LENGTH_SH           ORT).show();
    }

});

CheckBox:

自定義樣式:與radiobutton類似,android:button="@drawable/我的selector樣式":

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

     <item android:state_checked="true" android:drawable="@drawable/icon_checkbox_true"/>

    <item android:state_checked="false" android:drawable="@drawable/icon_checkbox_false"/>

</selector>

ImageView:

1.圖片縮放類型侣监,scaleType:

center:保持原圖的大小鸭轮,顯示在ImageView的中心。

center_crop:圖片按照比例放大縮小居中顯示在ImageView上橄霉。

matrix:從圖片左上角開始窃爷。

fit_xy:強制拉伸圖片,直至鋪滿ImageView姓蜂。

fit_center:原圖按照比例放大縮小到ImageView的高度按厘,居中顯示

2.圖片框架Glide的使用心得:

1)gradle引入:

implementation 'com.github.bumptech.glide:glide:4.3.1' //圖片異步加載

annotationProcessor 'com.github.bumptech.glide:compiler:4.3.1'
2)清單配置文件添加網(wǎng)絡(luò)權(quán)限,同時application中添加一句話:

<uses-permission android:name="android.permission.INTERNET" />

android:usesCleartextTraffic="true"

(百度:指示應(yīng)用程序是否打算使用明文網(wǎng)絡(luò)流量钱慢,例如明文HTTP逮京。目標API級別為27或更低的應(yīng)用程序的默認值為“ true”。面向API級別28或更高級別的應(yīng)用默認為“ false”)
3)使用

  Glide.with(this).load("圖片URL").into(ImageView);

ListView:

1.一些屬性設(shè)置:

    android:divider="@color/colorBlue" //分割線顏色

    android:dividerHeight="1dp"    //分割線高度

    android:scrollbars="none"  //右邊下拉框顯示為無

    android:overScrollMode="never" //滑到頭的漸變設(shè)置為無

    android:listSelector="@drawable/我的select樣式" //每個item點擊的效果

2.還有一個item頁面的布局滩字,內(nèi)容自定

3.listview使用:listview.setAdapter(new MyListviewAdapter(this));

括號內(nèi)為自定義適配器:

public class MyListviewAdapter extends BaseAdapter {

    private Context context;

    private LayoutInflater inflater; 

    public MyListviewAdapter(Context context){

        this.context = context;

        inflater = LayoutInflater.from(context);

    }

    @Override

    public int getCount() {

        return 10; //這是暫時設(shè)置10條數(shù)據(jù)造虏,實際開發(fā)傳列表的size

    }

    @Override

    public Object getItem(int position) {

        return null;

    }

    @Override

    public long getItemId(int position) {

        return 0;

    }

    static class ViewHolder{

        public ImageView imageView;

        public TextView tvTitle,tvTime,tvContent;

    }

    @Override

    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        if(convertView == null){

            convertView = inflater.inflate(R.layout.layout_list_item,null);

            holder = new ViewHolder();

            holder.imageView = convertView.findViewById(R.id.iv);

            holder.tvTitle = convertView.findViewById(R.id.tv_title);

            holder.tvTime = convertView.findViewById(R.id.tv_time);

            holder.tvContent = convertView.findViewById(R.id.tv_content);

            convertView.setTag(holder);

        }else{

            holder = (ViewHolder) convertView.getTag();

        }

        holder.tvTitle.setText("這是標題");

        holder.tvTime.setText("2088-08-08");

        holder.tvContent.setText("這是內(nèi)容");

        Glide.with(convertView).load("http://img2.imgtn.bdimg.com/it/u=1968765211,2786040509&fm=26&gp=0.jpg").into(holder.imageView);

        return convertView;

    }

}

4.listview的點擊監(jiān)聽事件:

listview.setOnItemClickListener  //點擊

listview.setOnItemLongClickListener //長按

GridView:

1.總體與listview相似御吞,屬性:

android:numColumns="3" //多少列

android:horizontalSpacing="10dp" //item水平間距

android:verticalSpacing="10dp" //item垂直間距

2.使用:

gridView.setAdapter(new MyGridViewAdapter(this)); //適配器內(nèi)容與listview類似

gridView.setSelector(new ColorDrawable(Color.TRANSPARENT));//去除默認的點擊波紋

ScrollView麦箍,HorizontalScrollView:

一個垂直方向,一個水平方向陶珠, 只能包含一個子元素挟裂。

Recyclerview:

是其他視圖的升級版,更加靈活揍诽,開發(fā)常用诀蓉。本身沒有點擊,長按等監(jiān)聽事件暑脆,需自己寫調(diào)用渠啤。build.gradle引用:

implementation'com.android.support:recyclerview-v7:28.0.0'(版本換自己的)

1.列表視圖:
1)布局:

        <android.support.v7.widget.RecyclerView

            android:id="@+id/rv_main"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:background="@color/colorWhite"

            android:scrollbars="none"

            android:overScrollMode="never"/>

2)引用:(在res/values文件夾下新建dimens.xml,設(shè)置一些參數(shù):dividerHeight)

        recyclerview.setLayoutManager(new LinearLayoutManager(this)); //設(shè)置成列表格式視圖

        recyclerview.addItemDecoration(new MyDecoration());

        recyclerview.setAdapter(new LinearAdapter(this, new LinearAdapter.OnItemClickListener()         {    //自定義適配器添吗,以及item點擊監(jiān)聽

            @Override

            public void onClick(int pos) {

                Toast.makeText(LinearRecyclerViewActivity.this,"點擊了"+pos,Toast.LENGTH_SHORT).show();

            }

    }));

//設(shè)置類似listview一樣的分割線沥曹,可以控制方向

class MyDecorationextends RecyclerView.ItemDecoration{

    @Override

    public void getItemOffsets(@NonNull Rect outRect,@NonNull View view,@NonNull RecyclerView parent,@NonNull RecyclerView.State state) {

        super.getItemOffsets(outRect, view, parent, state);

        outRect.set(0,0,0,getResources().getDimensionPixelOffset(R.dimen.dividerHeight));

    }
}

具體適配器方法:

public class LinearAdapter extends RecyclerView.Adapter<LinearAdapter.LinearViewHolder>{

    private Context context;

    private OnItemClickListener clickListener;

    public LinearAdapter(Context context,OnItemClickListener clickListener){

        this.context = context;

        this.clickListener = clickListener;

    }

    @NonNull

    @Override

    public LinearAdapter.LinearViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        return new LinearViewHolder(LayoutInflater.from(context).inflate(R.layout.layout_linear_item,viewGroup,false));

    }

    @Override

    public void onBindViewHolder(@NonNull LinearAdapter.LinearViewHolder viewHolder,final int i) {

        viewHolder.textView.setText("hello world"+i);

        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                clickListener.onClick(i);

            }

        });

    }

    @Override

    public int getItemCount() {

        return 30;

    }

    class LinearViewHolder extends RecyclerView.ViewHolder{

        private TextView textView;

        public LinearViewHolder(@NonNull View itemView) {

            super(itemView);

            textView = itemView.findViewById(R.id.tv_linear_title1);

        }

    }

    public interface OnItemClickListener{

        void onClick(int pos);

    }

}

2.水平滾動視圖:
與列表視圖相似,代碼幾乎沒什么變化,只變化了方向等妓美,變化代碼:

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);

    linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);//方向改變?yōu)樗椒较?
    recyclerview.setLayoutManager(linearLayoutManager);

    class MyDecoration extends RecyclerView.ItemDecoration{

        @Override

        public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {

            super.getItemOffsets(outRect, view, parent, state);                                 outRect.set(0,0,getResources().getDimensionPixelOffset(R.dimen.dividerHeight),0);//分割線在右邊

    }

}

3.網(wǎng)格視圖:
與列表視圖相似僵腺,少量變化,適配器基本一樣:

recyclerview.setLayoutManager(new GridLayoutManager(this,3)); //設(shè)置格式為網(wǎng)格視圖壶栋,3列的

4.瀑布流視圖:
與列表視圖相似辰如,少量變化,適配器基本一樣(這里子布局是個圖片布局贵试,找兩張不同尺寸的圖片琉兜,一個寬的,一個長的)

recyclerview.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));//設(shè)置2列的毙玻,垂直方向的不規(guī)則布局呕童。

recyclerview.addItemDecoration(new MyDecoration());



class MyDecoration extends RecyclerView.ItemDecoration{

    @Override

    public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {

        super.getItemOffsets(outRect, view, parent, state);

        int gap = getResources().getDimensionPixelOffset(R.dimen.dividerHeight2);

        outRect.set(gap,gap,gap,gap);

    }

}
適配器中奇數(shù)的item和偶數(shù)的item分別設(shè)置不同圖片:

@Override

public void onBindViewHolder(@NonNull StaggeredGridAdapter.LinearViewHolder viewHolder, final int i) {

    if(i % 2 == 0){

        viewHolder.imageView.setImageResource(圖片1);

    }else{

        viewHolder.imageView.setImageResource(圖片2);

    }

    viewHolder.itemView.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            clickListener.onClick(i);

        }

    });

}

5.多個布局視圖:
如,給列表視圖的奇數(shù)item和偶數(shù)item分別加載不同的布局文件淆珊,activity頁面代碼不變夺饲,適配器頁面代碼發(fā)生改變:

public class DifferenceViewHolderAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private Context context;

    private OnItemClickListener clickListener;

    public DifferenceViewHolderAdapter(Context context, OnItemClickListener clickListener){

        this.context = context;

        this.clickListener = clickListener;

    }

    @NonNull

    @Override

    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        if(i == 0){

            return new LinearViewHolder(LayoutInflater.from(context).inflate(R.layout.layout_linear_item,viewGroup,false));

        }else{

            return new LinearViewHolder2(LayoutInflater.from(context).inflate(R.layout.layout_linear_item_2,viewGroup,false));

        }

    }

   @Override

    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {

        if(getItemViewType(i) == 0){

            ((LinearViewHolder)viewHolder).textView.setText("hello world"+i);

        }else{

            ((LinearViewHolder2)viewHolder).textView.setText("文本"+i);

        }

        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                clickListener.onClick(i);

            }

        });

    }

    @Override

    public int getItemViewType(int position) {

        if(position % 2 == 0){

            return 0;

        }else {

            return 1;

        }

    }

    @Override

    public int getItemCount() {

        return 30;

    }

    class LinearViewHolder extends RecyclerView.ViewHolder{

        private TextView textView;

        public LinearViewHolder(@NonNull View itemView) {

            super(itemView);

            textView = itemView.findViewById(R.id.tv_linear_title1);

        }

    }

    class LinearViewHolder2 extends RecyclerView.ViewHolder{

        private TextView textView;

        private ImageView imageView;

        public LinearViewHolder2(@NonNull View itemView) {

            super(itemView);

            textView = itemView.findViewById(R.id.tv_linear_title2);

            imageView = itemView.findViewById(R.id.tv_linear_iv);

        }

    }

    public interface OnItemClickListener{

        void onClick(int pos);

    }

}

WebView:

加載本地HTML文件或者網(wǎng)頁

1.加載本地HTML,先在main文件夾下新建assets資源文件夾施符,然后將事先準備好的本地HTML文件放進去往声,然后調(diào)用代碼:

webview.loadUrl("file:///android_asset/test.html");

2.加載網(wǎng)頁

    webview.getSettings().setJavaScriptEnabled(true);//使可以加載網(wǎng)頁的js

    webview.getSettings().setDomStorageEnabled(true);//啟用或禁用DOM緩存

    webview.setWebViewClient(new MyWebViewClient());//使得不打開手機自帶瀏覽器

    webview.setWebChromeClient(new MyWebChromeClient());//得到網(wǎng)頁的一些回調(diào)數(shù)據(jù),也可以為 WebView 的加載添加進度條

//      wv.addJavascriptInterface();

    webview.loadUrl("https://www.baidu.com");        //要加載的地址



class MyWebChromeClient extends WebChromeClient{

    @Override

    public void onProgressChanged(WebView view, int newProgress) {

        super.onProgressChanged(view, newProgress);

    }

    @Override

    public void onReceivedTitle(WebView view, String title) {

        super.onReceivedTitle(view, title);

        setTitle(title);

    }

}

class MyWebViewClient extends WebViewClient {

    @Override

    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

        view.loadUrl(request.getUrl().toString());

        return true;

    }

    @Override

    public void onPageStarted(WebView view, String url, Bitmap favicon) {

        Log.i("onPageStarted","onPageStarted");

        super.onPageStarted(view, url, favicon);

    }

    @Override

    public void onPageFinished(WebView view, String url) {

        Log.i("onPageFinished","onPageFinished");

        super.onPageFinished(view, url);

//            webview.loadUrl("javascript:alert('hello')");//兩種添加自定義js到webview的方法

//            webview.evaluateJavascript("javascript:alert('hello')",null);;

    }

@Override public boolean onKeyDown(int keyCode, KeyEvent event) {   
      if(keyCode == KeyEvent.KEYCODE_BACK && wv.canGoBack()){  
          webview.goBack();   
          return true;
      }
      return super.onKeyDown(keyCode,event);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末戳吝,一起剝皮案震驚了整個濱河市浩销,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌听哭,老刑警劉巖慢洋,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異陆盘,居然都是意外死亡普筹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門隘马,熙熙樓的掌柜王于貴愁眉苦臉地迎上來太防,“玉大人,你說我怎么就攤上這事酸员⊙殉担” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵幔嗦,是天一觀的道長酿愧。 經(jīng)常有香客問我,道長邀泉,這世上最難降的妖魔是什么嬉挡? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任叛氨,我火速辦了婚禮,結(jié)果婚禮上棘伴,老公的妹妹穿的比我還像新娘寞埠。我一直安慰自己冒萄,他們只是感情好新思,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布其掂。 她就那樣靜靜地躺著本昏,像睡著了一般肄方。 火紅的嫁衣襯著肌膚如雪望拖。 梳的紋絲不亂的頭發(fā)上嘀韧,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天茎用,我揣著相機與錄音揪阶,去河邊找鬼昌抠。 笑死,一個胖子當(dāng)著我的面吹牛鲁僚,可吹牛的內(nèi)容都是我干的炊苫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼冰沙,長吁一口氣:“原來是場噩夢啊……” “哼侨艾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拓挥,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤唠梨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侥啤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體当叭,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年盖灸,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚁鳖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡糠雨,死狀恐怖才睹,靈堂內(nèi)的尸體忽然破棺而出徘跪,到底是詐尸還是另有隱情甘邀,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布垮庐,位于F島的核電站松邪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏哨查。R本人自食惡果不足惜逗抑,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧邮府,春花似錦荧关、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仙辟,卻和暖如春同波,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叠国。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工未檩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粟焊。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓冤狡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親项棠。 傳聞我的和親對象是個殘疾皇子筒溃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容