当前位置:首页 » 安卓系统 » android自定义actionbar

android自定义actionbar

发布时间: 2022-06-25 13:16:39

① 在Android开发中还有必要去研究和使用ActionBar吗

首先你要考虑兼容的问题,还要考虑里面提供的各种生硬烦人的api和乱七八糟的设置,到头来还是很难自定义化,真是浪费了精力,成效还不大。
现在手上有个项目考虑到要在ActionBar上面加一些东西,我果然的自定义了一个layout,然后再include进去,想怎么变就怎么变。但我又在想,既然有actionBar的存在,就有它存在的意义,我是不是还没有掌握到,所以觉得不好用呢

② 如何调整Android ActionBar向上按钮与屏幕左侧的距离

可行的解决办法是:
(1) 我想到的最直接的办法是重新切一张图,理由如下:
Google官网给出的“左向箭头”的material icon,就包含上下左右间距:
(2) 看你的代码,你已经为action bar提供了自定义的布局R.layout.my_booking_actionbar,为什么不做的彻底一些呢?放弃使用android提供的Home键android.R.id.home作为UpIndicator。

而是在这个布局中添加一个ImageView,这样就可以自定义你需要的间距离。然后实现ImageView.OnClickListener,点击时返回父activity。
private void initActionBar() {
ActionBar actionBar = getActionBar();
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setCustomView(R.layout.actionbar_crime_fragment);
View actionView = actionBar.getCustomView();

ImageView upButton = (ImageView) actionView.findViewById(R.id.actionBarUp);
upButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Providing Up Navigation,提供了一种返回父Activity的方法,
// 同时需要在manifest中增加元数据标签,来定义它的父Activity;
// 详情请参考以下链接,
// http://developer.android.com/training/implementing-navigation/ancestral.html
if (NavUtils.getParentActivityName(CrimePagerActivity.this) != null) {
NavUtils.navigateUpFromSameTask(CrimePagerActivity.this);
}
}
});
}

ActionBar的自定义布局文件actionbar_crime_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
android:id="@+id/actionBarUp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="4dp"
android:background="@drawable/ic_keyboard_arrow_left_white_24dp"
android:contentDescription="@string/app_name"
android:scaleType="fitXY" />

<TextView
android:id="@+id/actionBarTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>

Done.

③ 如何在fragment中自定义actionbar

一、使用最新的adt插件创建android项目时,如果选择的MinimumRequiredSDK为8,而TargetSDK大于它的话,系统会自动在项目中导入Supportv4包;在创建项目向导最后一步可以选择NavigationType,如果选择了NavigationDrawer,adt工具会在创建项目时自动生成DrawerLayout相关示例代码。但由于DrawerLayout是在高版本的API中出现的,因此adt工具会帮助导入Supportv7appcompat包,这样DrawerLayout就可以兼容到Android2.2了。二、首先打开res目录下的style文件,自定义一个主题和actionbar的style,然后在自定义主题中引用自定义的actionbar的style:这里要注意的是无论是在自定义主题还是自定义style时,要根据情况加上parent属性,如果没有加上相应的parent属性的话就不能使用父style中没有被覆盖的样式。完成自定义主题和style后要记得在manifest文件中应用:这里可以让整个应用都使用自定义的主题,也可以指定单个activity使用,使用android:theme属性来指定。三、接下来要给app添加DrawerLayout了,修改MainActivity的布局文件,添加一个DrawerLayout,其中包含一个Drawer和内容布局的Container:注意,下面那个fragment就是app的Drawer,其中的属性android:layout_gravity在这里表示Drawer从哪一侧划出,start代表左侧,end代表右侧;还可以定义两个fragment,然后一个左侧划出一个右侧划出。四、创建完DrawerLayout布局后,来为Drawer定义一个fragment,用ListView加上headerView来实现,创建一个NavigationDrawerFragment继承自Fragment,这个fragment的布局包含一个ListView:使用一个ArrayList来存放ListView的数据,定义一个DrawerListItem对象来存放每个Item的title和icon的资源ID:

④ 安卓开发android studio中怎样自定义actionbar的布局

1theme是用于application或activity的。首先打开AndroidManifest文件查看,一般application节点都有默认主题,

2接下来打开上图中theme所在的文件。res-->values-->styles。

3打开后。可以看到,name属性正是步骤一中theme的值。在可以看到parent属性的值,parent是用于继承内置样式的。我们接下来要在该样式的基础上修改。

4修改action bar的背景。可以从图中看到,都是一个引用另一个。图中黄色高亮的部分,是为了兼容性,可以看到其实值是相同的。在这个例子中,因为theme的parent是Theme.AppCompat.Light.DarkActionBar真正起作用的是不带‘android:’前缀的语句,是为了支持低版本的兼容包。而带前缀的语句是API 11以上支持的。

5修改布局背景。这个在layout文件中也可以改,不过在application的theme中修改可以应用于所有activity。

⑤ 如何让android的actionbar浮动且透明

如上图所示,谷歌地图的actionbar是透明的,且浮动在整个布局之上,没有占用布局空间。其实要做到这样的效果,我们首先想到的是两个方面:
1.将让actionbar浮动起来。
2.给actionbar一个背景,可以为颜色也可以为图片。
下面我以背景色为颜色举个例子。
getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);ActionBar actionBar = getActionBar();actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#330000ff")));

google的actionbar是分为上下两栏显示的,上面的代码只能设置顶部actionbar的背景色,为了让下面的背景色一致,还需要添加一行代码:
actionBar.setSplitBackgroundDrawable(newColorDrawable(Color.parseColor("#330000ff")));

如果我们不想在代码中设置actionbar背景,而是在style中修改xml,可以自定义actionbar,然后设置下面三个属性:
<style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar"> <item name="android:background">@drawable/ab_stacked_solid_inverse_holo</item> <item name="android:backgroundStacked">#346c36</item> <item name="android:backgroundSplit">@drawable/ab_stacked_solid_inverse_holo</item> </style>

其中的background和setBackgroundDrawable对应,backgroundSplit和setSplitBackgroundDrawable对应,而backgroundStacked代表的是actionbar选项卡的背景色。
但是actionbar的背景如果设置为纯色,或者为不透明的图片,那么上面的方法无法使actionbar达到透明的效果。注意上面的代码中,我们的颜色值并不是纯色的而是有一定的透明度。#330000ff的前两位代表透明度。

⑥ 安卓自定义actionbar,怎么设置监听事件,急急急

用CustomView。

layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http:://schemas。android。com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:textColor="#FFF"
android:text="我才是标题" />

</LinearLayout>
部分代码:

View customView = LayoutInflater.from(this).inflate(R.layout.back, new LinearLayout(this), false);
getActionBar().setDisplayShowCustomEnabled(true);
getActionBar().setCustomView(customView);
customView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "....", 10000).show();
}
});
我自己测试过,暂无出现问题。

⑦ 如何自定义ActionBar中Tab的高度

解决方案 »

ActionBar的高度是在framework的样式中定义的
<style name="Widget.ActionBar">
<item name="android:background">@android:drawable/action_bar_background</item>
<item name="android:displayOptions">useLogo|showHome|showTitle</item>
<item name="android:divider">@android:drawable/action_bar_divider</item>
<item name="android:height">?android:attr/actionBarSize</item>
<item name="android:paddingLeft">0dip</item>
<item name="android:paddingTop">0dip</item>
<item name="android:paddingRight">0dip</item>
<item name="android:paddingBottom">0dip</item>
<item name="android:titleTextStyle">@android:style/TextAppearance.Widget.ActionBar.Title</item>
<item name="android:subtitleTextStyle">@android:style/TextAppearance.Widget.ActionBar.Subtitle</item>
<item name="android:progressBarStyle">@android:style/Widget.ProgressBar.Horizontal</item>
<item name="android:indeterminateProgressStyle">@android:style/Widget.ProgressBar.Small</item>
<item name="android:homeLayout">@android:layout/action_bar_home</item>如果想修改,可以自定义样式,来继承ActionBar的样式;或者在当前主题中修改


ActionBar的系统样式在framework/base/core/res/res/values/styles里有定义
系统定义了ActionBar的高度<item name="android:height">?android:attr/actionBarSize</item>如果想修改,可以考虑自定义一个样式,继承系统的ActionBarStyle,自定义高度又或者在当前的主题中修改

⑧ 自定义的actionbar怎么实现透明度渐变

public class FadingActionBarHelper {

private static final String TAG = "FadingActionBarHelper";

private int mAlpha = 255;
private Drawable mDrawable;
private boolean isAlphaLocked;

private final ActionBar mActionBar;

public FadingActionBarHelper(final ActionBar actionBar) {
mActionBar = actionBar;
}

public FadingActionBarHelper(final ActionBar actionBar, final Drawable drawable) {
mActionBar = actionBar;
(drawable);
}

public void (Drawable drawable) {
(drawable, true);
}

@TargetApi(Build.VERSION_CODES.KITKAT)
public void (Drawable drawable, boolean mutate) {
mDrawable = mutate ? drawable.mutate() : drawable;
mActionBar.setBackgroundDrawable(mDrawable);
if (mAlpha == 255) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
mAlpha = mDrawable.getAlpha();
} else {
setActionBarAlpha(mAlpha);
}
}

/**
* An {@link android.app.ActionBar} background drawable.
*
* @see #(android.graphics.drawable.Drawable)
* @see #setActionBarAlpha(int)
*/
public Drawable () {
return mDrawable;
}

/**
* Please use this method for global changes only!
* This is helpful when you need to provide something like
* Navigation drawer: lock ActionBar and set
* {@link android.graphics.drawable.Drawable#setAlpha(int)}
* to {@link #()} directly.
*
* @param alpha a value from 0 to 255
* @see #()
* @see #getActionBarAlpha()
*/
public void setActionBarAlpha(int alpha) {
if (mDrawable == null) {
Log.w(TAG, "Set action bar background before setting the alpha level!");
return;
}
if (!isAlphaLocked) {
mDrawable.setAlpha(alpha);
View view = mActionBar.getCustomView();
if(view!=null){
//这里是对自定义actionbar背景的处理,我这边就草草了事了
if(alpha>=55){
view.findViewById(R.id.search_button).setBackgroundResource(R.drawable.search);
view.findViewById(R.id.refresh_button).setBackgroundResource(R.drawable.refresh);
}else{
view.findViewById(R.id.search_button).setBackgroundResource(R.drawable.skin_nav_icon_l_search_rev);
view.findViewById(R.id.refresh_button).setBackgroundResource(R.drawable.skin_nav_icon_r_refresh_rev);
}
Log.i(TAG, "search_button.alpha=>"+alpha);
}
}
mAlpha = alpha;
}

public int getActionBarAlpha() {
return mAlpha;
}

/**
* When ActionBar's alpha is locked {@link #setActionBarAlpha(int)}
* won't change drawable\'s alpha (but will change {@link #getActionBarAlpha()} level)
*
* @param lock
*/
public void setActionBarAlphaLocked(boolean lock) {

// Update alpha level on unlock
if (isAlphaLocked != (isAlphaLocked = lock) && !isAlphaLocked) {
setActionBarAlpha(mAlpha);
}
}

public boolean isActionBarAlphaLocked() {
return isAlphaLocked;
}
}

2.其他的组件类我这不了,有兴趣的朋友自行下载github上的项目吧o(∩_∩)o。

[java] view plain
public class NotifyingScrollView extends ScrollView {
// Edge-effects don't mix well with the translucent action bar in Android 2.X
private boolean mDisableEdgeEffects = true;

/**
* @author Cyril Mottier
*/
public interface OnScrollChangedListener {
void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt);
}

private OnScrollChangedListener mOnScrollChangedListener;

public NotifyingScrollView(Context context) {
super(context);
}

public NotifyingScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public NotifyingScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (mOnScrollChangedListener != null) {
mOnScrollChangedListener.onScrollChanged(this, l, t, oldl, oldt);
}
}

public void setOnScrollChangedListener(OnScrollChangedListener listener) {
mOnScrollChangedListener = listener;
}

@Override
protected float getTopFadingEdgeStrength() {
// http://stackoverflow.com/a/6894270/244576
if (mDisableEdgeEffects && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
return 0.0f;
}
return super.getTopFadingEdgeStrength();
}

@Override
protected float getBottomFadingEdgeStrength() {
// http://stackoverflow.com/a/6894270/244576
if (mDisableEdgeEffects && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
return 0.0f;
}
return super.getBottomFadingEdgeStrength();
}
}

⑨ android 自定义控件中怎么隐藏actionbar

1.在配置文件中通过android:theme=""属性隐藏:
<activity
android:name=".MainActivity"
android:label="@string/app_name"
<!-- 这行代码便可以隐藏ActionBar -->
android:theme="@android:style/Theme.Light.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

2.在Activity代码中隐藏:
public class MainActivity extends Activity {

ActionBar actionBar; //声明ActionBar

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

actionBar = getActionBar(); //得到ActionBar
actionBar.hide(); //隐藏ActionBar
}
}

⑩ 开发产品中是ActionBar居多还是自定义标题栏居多

使用自定义ActionBar就可以 Android系统中ActionBar默认的布局不美观且难于控制,通过为ActionBar自定义布局的方式可以灵活控制ActionBar。

热点内容
windowspython23 发布:2024-05-06 09:27:50 浏览:746
编程ug开初 发布:2024-05-06 09:27:48 浏览:560
小白源码论坛 发布:2024-05-06 09:24:56 浏览:139
android进程重启 发布:2024-05-06 09:15:09 浏览:96
ie浏览器设置默认ftp 发布:2024-05-06 09:14:03 浏览:885
迈腾尊贵中控配置怎么使用 发布:2024-05-06 09:13:28 浏览:656
奥迪存储卡格式不正确请格式化存储卡 发布:2024-05-06 09:01:31 浏览:34
个人信用数据库 发布:2024-05-06 09:00:34 浏览:417
最新解压缩 发布:2024-05-06 09:00:28 浏览:983
童编程 发布:2024-05-06 08:44:01 浏览:246