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);
}