我目前正在做的我的第一个应用程序之一。 我使用ActionBarSherlock。 我想提出我的标志重叠的动作条(滚动型)。
目前,我有main_activity.xml。 在MainActivity.java我使用的setContentView查看main_activity.xml。 从那以后,我使用getSupportActionBar()为ActionBarSherlock。 我使用的RelativeLayout(http://www.mkyong.com/android/android-relativelayout-example/)尝试的东西出来。 这并没有真正的工作,因为有多种布局。
所以,我已经尝试了一些东西左右,但最终总是盈或动作条的后面,或者在到达内容之前停止。 这是因为两种不同的布局,这就是我知道的。 但是,我怎么能去解决这个问题? 可能吗? 提前致谢!
我想: http://f.cl.ly/items/3N0w243N1t2Q3i1H1f1k/Untitled-1.png
您可以:
A.分裂您的图像中的两个
有顶部的动作条标志,然后显示在你的内容的底部。
B.使用一个单一的形象
你需要一个只包含您的标志(你可能会想是这样的一个布局文件ImageView
一个内部LinearLayout
这样你就可以轻松地设置正确的页边距)。 然后调用后setContentView
为您的活动,添加您的徽标视图:
ViewGroup decorViewGroup = (ViewGroup) getWindow().getDecorView();
decorViewGroup.addView(logoView);
使用布局文件
实例布局文件(logo_view.xml):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/logo_image"
android:scaleType="center"
android:layout_marginLeft="10dip"
/>
</LinearLayout>
充气布局文件:
LayoutInflater inflater = LayoutInflater.from(this);
View logoView = inflater.inflate(R.layout.logo_view, null, false);
虽然原来的答案适用于某些设备,对他人的图像坐在状态栏下。 我解决了这个通过获取顶级动作条的位置,并将其与该标志图像的顶部的位置,然后只是增加了一些顶级的填充,如下所示:
// Inflate logo layout
LayoutInflater inflater = LayoutInflater.from(this);
final View logoView = inflater.inflate(R.layout.menu_logo, null);
// Add logo to view
ViewGroup viewGroup = (ViewGroup) getWindow().getDecorView();
viewGroup.addView(logoView);
// Adjust the logo position
int resId = getResources().getIdentifier("action_bar_container", "id", "android");
final View actionBarView = viewGroup.findViewById(resId);
if (actionBarView != null) {
actionBarView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
// Remove the listener
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
actionBarView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
actionBarView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
// Measure views
int[] location = new int[2];
actionBarView.getLocationOnScreen(location);
int[] logoLocation = new int[2];
logoView.getLocationOnScreen(logoLocation);
// Add top padding if necessary
if (location[1] > logoLocation[1]) {
logoView.setPadding(0, location[1] - logoLocation[1], 0, 0);
}
}
}
);
}
这个工作在广泛的设备 - 运行Android 4.0版本多达4.4.4和Android L移动预览(手机,大/小片INC Kindle Fire的HDX)。