編輯:關於Android編程
最近參加濟南一分享會,感受頗深,也很欣賞大神們的分享精神,好東西大家一起分享
不能做只會搬磚的碼農,要成為一個真正的程序員,當然我是媛,程序員分為三類,初級程序員,中級程序員,高級程序員,也不能總是做個小菜鳥,那也太沒有追求了,為了我的大神夢,開始學習自定義控件
本博客從最簡單的開始,先來介紹自定義組合控件,在我看來自定義空間中組合控件是最簡單的,這裡拿最常見的圖片和文字組合來說明
先上界面:
這個界面還是很常見的,很多app主頁都是這麼界面,當然下面的圖片文字等是可以自己設置的<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+z8LD5srH19S2qNLl1+m6z7/YvP61xNb30qq0+sLrOjwvcD4KPHA+ytfPyMrHvMyz0NfUTGluZWFyTGF5b3V019S2qNLlv9i8/jwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;">package com.sdufe.thea.guo.view; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.sdufe.thea.guo.R; public class CustomView extends LinearLayout { private ImageView mImageView; private TextView mTextView; Context context; public CustomView(Context context) { super(context,null); } public CustomView(Context context, AttributeSet attrs) { super(context, attrs); this.context=context; View view=LayoutInflater.from(context).inflate(R.layout.custom_view, this,true); mTextView=(TextView) view.findViewById(R.id.custom_textview); mImageView=(ImageView) view.findViewById(R.id.custom_imageview); } public void setText(String text){ mTextView.setText(text); } public void setTextColor(int color){ mTextView.setTextColor(color); } public void setTextSize(float size){ mTextView.setTextSize(size); } public void setImagViewResouce(Drawable drawable){ mImageView.setImageDrawable(drawable); } }
然後是自定義控件的布局文件
最後是對自定義控件的使用
package com.sdufe.thea.guo; import com.sdufe.thea.guo.view.CustomView; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Toast; public class MainActivity extends Activity { private CustomView mCustomView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initView(); } private void initView() { mCustomView=(CustomView) findViewById(R.id.custom); mCustomView.setText("我是大壞蛋"); mCustomView.setTextColor(getResources().getColor(R.color.text_color)); mCustomView.setImagViewResouce(getResources().getDrawable(R.drawable.phone)); mCustomView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "別點我", Toast.LENGTH_LONG).show(); } }); } }
一般LayoutInflater.from(context).inflate(resource, root),第一個參數就是要加載的布局id,第二個參數是指給該布局的外部再嵌套一層父布局,如果不需要就直接傳null,但是這裡要用到他的屬性,明顯不滿足,那就只能用有三個參數的了,那就來說一說三個參數的LayoutInflater.from(context).inflate(R.layout.custom_view, this,true);第一個參數還是加載的布局id,第二個參數是指給該布局的外部再嵌套一層父布局,第三個官方說attachToRoot Whether the inflated hierarchy should be attached to the root parameter? If false, root is only used to create the correct subclass of LayoutParams for the root view in the XML.中文意思就是attachToRoot無論充氣層次應附加到根參數?如果為假,根僅用於創建的LayoutParams正確的子類中的XML根視圖.
public View inflate(int resource, ViewGroup root, boolean attachToRoot) { if (DEBUG) System.out.println("INFLATING from resource: " + resource); XmlResourceParser parser = getContext().getResources().getLayout(resource); try { return inflate(parser, root, attachToRoot); } finally { parser.close(); } }當繼續追蹤第五行代碼,你就會知道其實他的實質是利用XML中的Pull解析,這裡先暫時放一放,只是說明一下這三個參數
1.當root為空時,attactRoot無效
2.當root不為空時,attachRoot為TRUE會加載布局文件的在外層root
3.當root不為空,attachroot為FALSE時,不會加載最外層的布局文件
ok,就先介紹這些,本博客主要是從Java代碼中實現自定義,下篇打算從屬性上實現自定義組合控件
代碼下載地址:http://download.csdn.net/detail/elinavampire/8141963
Github地址:https://github.com/coder-pig/AndroidStudio-Eat-Guide1.必須記住的快捷鍵:Ctrl+Shift+A
作為Android應用程序開發者都知道android是一個“碎片化”的世界。多種系統版本、多種尺寸、多種分辨率、多種機型,還有不同的廠商定制的不同
最近項目裡要做一個簡單的曲線圖來標識數據,開始以為很簡單,android已經有那麼多的開源圖表庫了,什麼achartenginee,hellochart,mpandroi
Android Studio快速提取方法 在開發過程中,有時在一個方法內部寫了過多的代碼,然後想要把一些代碼提取出來封裝下,分離開放在一個單獨的方法裡,可能你的
將自己的編程經歷寫出來是個好習慣先來效果圖:項目結構:1、底部導航底部導