本文实例为大家分享了Android自定义通用标题栏的具体代码,供大家参考,具体内容如下/p>

1自定义一个public_ bar. 文件

<?  version=\"1.0\" encoding=\"utf-8\"?>
<LinearLayout  ns:android=\"http://schemas.android.com/apk/res/android\"
 android:id=\"@+id/rootView\"
 android:layout_width=\"match_parent\"
 android:layout_height=\"wrap_content\"
 android:orientation=\"horizontal\">
 <ImageView
  android:id=\"@+id/ivLeft\"
  android:layout_width=\"wrap_content\"
  android:layout_height=\"wrap_content\"
  android:src=\"@drawable/z\"/>
 <LinearLayout
  android:layout_width=\"wrap_content\"
  android:layout_height=\"match_parent\"
  android:layout_weight=\"1\">
  <TextView
   android:id=\"@+id/tv \"
   android:layout_width=\"match_parent\"
   android:layout_height=\"wrap_content\"
   android:layout_weight=\"1\"
   android:text=\"tv \"/>
  <TextView
   android:id=\"@+id/tvRight\"
   android:layout_width=\"match_parent\"
   android:layout_height=\"wrap_content\"
   android:layout_weight=\"1\"
   android:text=\"tvRight\"/>
 </LinearLayout>
</LinearLayout>

2.在values文件夹下新建一个attrs.

<?  version=\"1.0\" encoding=\"utf-8\"?>
 <resources>
 <declare-styleable name=\"Customer Bar\">
  <attr name=\"left_image\" format=\"reference\"></attr>
  <attr name=\"center_text\" format=\"string\"></attr>
  <attr name=\"center_text_color\" format=\"color\"></attr>
  <attr name=\"center_text_size\" format=\"dimension\"></attr>
 </declare-styleable>
 </resources>

3.自定义Customer Bar类继承LinearLayout,统一页面标题栏,项目中包括接口回调

public class Customer Bar extends LinearLayout {
private LinearLayout rootView;
private ImageView ivLeft;
private TextView tv ;
private TextView tvRight;
//3.声明回调对象
private CustomerClick leftClick;

/**
 * @param context
 */
//在代码中直接new一个Custom View实例的时候,会调用第一个构造函数
public Customer Bar(Context context) {
 this(context,null);
}

//在 布局文件中调用Custom View的时候,会调用第二个构造函数
public Customer Bar(Context context,AttributeSet attrs) {
 this(context, attrs,-1);
}

//在 布局文件中调用Custom View,并且Custom View标签中还有自定义属性时,这里调用的还是第二个构造函数.
public Customer Bar(Context context,AttributeSet attrs, int defStyleAttr) {
 super(context, attrs, defStyleAttr);
 init(context);
 initAttrs(context,attrs);
 initLister();
}

private void init(Context context) {
 rootView= (LinearLayout) View.inflate(context,R.layout.layout_customer_ _bar,this);
 ivLeft=rootView.findViewById(R.id.ivLeft);
 tv =rootView.findViewById(R.id.tv );
 tvRight=rootView.findViewById(R.id.tvRight);
}

private void initAttrs(Context context, AttributeSet attrs) {
 TypedArray typedArray=context.obtainStyledAttributes(attrs,R.styleable.Customer Bar);
 Drawable drawable=typedArray.getDrawable(R.styleable.Customer Bar_left_image);
 if (drawable!=null){
  ivLeft.setImageDrawable(drawable);
 }
 CharSequence text = typedArray.getText(R.styleable.Customer Bar_center_text);
 if (!TextUtils.isEmpty(text)) {
  tv .setText(text);
 }
 int color = typedArray.getColor(R.styleable.Customer Bar_center_text_color, -1);

 if (color != -1) {
  tv .setTextColor(color);
 }

 float dimension = typedArray.getDimension(R.styleable.Customer Bar_center_text_size, 0f);

 tv .setTextSize(dimension);
}

private void initLister() {
 ivLeft.set Listener(new  Listener() {
  @Override
  public void  (View v) {
   //5.使用接口回调
   if (leftClick!=null){
    leftClick.onLefClick(v);
   }
  }
 });
}
//4、提供回调对象的set方法
public void setLeftClick(CustomerClick leftClick) {
 this.leftClick = leftClick;
}
//1.定义回调接口
interface CustomerClick{
 void onLefClick(View view);
}
}

4.在布局文件中的引用

<com.cn.jyx.customer bar.Customer Bar
 android:id=\"@+id/ct \"
 android:layout_width=\"match_parent\"
 android:layout_height=\"wrap_content\"
 android:gravity=\"center\"
 customer:center_text=\"吐泡泡\"
 customer:center_text_color=\"#ff00ff\"
 customer:center_text_size=\"20sp\" />

5.在Activity中的用法

public class MainActivity extends AppCompatActivity {
 private Customer Bar ct ;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ct =findViewById(R.id.ct );
  //6、使用
  ct .setLeftClick(new Customer Bar.CustomerClick() {
   @Override
   public void onLefClick(View view) {
    Toast.makeText(MainActivity.this,\"吐泡泡\",Toast.LENGTH_LONG).show();
   }
  });
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

收藏 打印