有没有办法在xml文件中获取android中的导航栏大小?
android:paddingTop="?android:attr/actionBarSize"
Run Code Online (Sandbox Code Playgroud)
哪里actionBarSize是导航栏大小?
我正在尝试利用新的KitKat半透明系统条,在我的应用程序的背景中获得全屏图像.
我在找出正确的设置以获得我想要的行为时遇到了问题.现在我有ViewPager三个Fragments,每个RelativeLayout包含一个ImageView(用于背景图像)和一个TextView用于内容.
我所追求的是让内容完全适合可用于交互的屏幕部分,并使图像占据屏幕的整个可见部分.
如果我只是android:Theme.Holo.Light.NoActionBar.TranslucentDecor用作我的主题,它在纵向看起来很好,但导航栏与横向内容重叠(请参见下面的屏幕截图).


按照文档中的建议,我添加android:fitsSystemWindows = true到我的主题,但这会产生一些奇怪的文物(见下文)

我怎样才能使它在第二个例子中表现得像,但看起来不错,没有视觉文物?
我已经使用了ThreePhaseBottomLibrary,根据我的经验,当我向上滚动时动画应该按照上面的图像并行!
下面是我的Fragment类.它的工作正常,除了这个图像并行动画按照屏幕:
Myfragment.java
public class MyFragment extends BottomSheetFragment {
private BottomSheetLayout mBottomSheetLayout;
private ImageView mBottomSheetBackgroundImageView;
private int mBottomSheetHeight;
private ImageView movingIconImageView;
private AppBarLayout mAppBarLayout;
private int mMStartMarginBottom;
private int mMStartMarginLeft;
private Toolbar mToolbar;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_my, container, false);
mBottomSheetHeight = getResources().getDimensionPixelSize(R.dimen.header_height);
mAppBarLayout = (AppBarLayout) view.findViewById(R.id.appbar);
view.setMinimumHeight(getResources().getDisplayMetrics().heightPixels);
CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) view.findViewById(R.id.collapsing_toolbar);
//collapsingToolbar.setTitle("Title");
collapsingToolbar.setTitleEnabled(false);
mToolbar = (Toolbar) view.findViewById(R.id.toolbar);
//final AppCompatActivity activity = (AppCompatActivity) getActivity();
//activity.setSupportActionBar(toolbar); …Run Code Online (Sandbox Code Playgroud) 我需要将onTouch事件的X,Y坐标映射到ImageView内的Bitmap X,Y坐标来执行此操作我使用以下方法.
然而,这种方法似乎只有在以下情况下才能起作用:
a)完全缩放图像(一直进入)
b)无论如何都可以在我的应用程序全屏显示时工作
final int index = event.getActionIndex();
touchLocation = new float[] {
event.getX(index), event.getY(index)
};
Matrix matrix = new Matrix();
ImageView view = getImageView();
view.getImageMatrix().invert(matrix);
matrix.postTranslate(view.getScrollX(), view.getScrollY());
matrix.mapPoints(touchLocation);
// touchLocation[0] is real x and [1] is real y
Run Code Online (Sandbox Code Playgroud)
但是我的活动是一个ActionBar活动,所以我在Y轴上的位置有点错误.我试着扣除ActionBar和StatusBar的高度,但这并不总是有效.
奇怪的是,在全屏幕上无论我是否完全缩放我的图像都无关紧要我总是得到正确的坐标,但是对于任何其他活动类型,这都不会正确地映射点.
我在我的应用程序中使用Actionbar.
我以编程方式想要ActionBar的高度因此我正在使用:
ActionBar.getHeight();
Run Code Online (Sandbox Code Playgroud)
但是我得到了0的高度值.那么如何才能获得ActionBar的高度?
我在尝试在向下滚动时隐藏操作栏时出现问题.然后在向上滚动时,操作栏必须再次显示.
对于Eg:
我参考了这个教程.在这里你可以看到与隐藏相关的输出和相应代码并显示操作栏.
我正在展示我到目前为止得到的输出.

向下滚动后:

上面显示的屏幕截图,它也隐藏了操作栏标签.但它必须只隐藏操作栏.这是主要问题.
向上滚动后:

上面的屏幕截图显示它显示带有标签的操作栏.
TopRatedFragment.java:
import info.androidhive.tabsswipe.R;
import android.app.ActionBar;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.Window;
import android.widget.ScrollView;
public class TopRatedFragment extends Fragment implements ViewTreeObserver.OnScrollChangedListener {
private float mActionBarHeight;
private ActionBar actionBar;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_top_rated, container, false);
final TypedArray styledAttributes = getActivity().getTheme().obtainStyledAttributes(
new int[] { android.R.attr.actionBarSize });
mActionBarHeight = styledAttributes.getDimension(0, 0);
styledAttributes.recycle(); …Run Code Online (Sandbox Code Playgroud) 作为标题,我的PreferenceFragment与我的工具栏重叠.我已经尝试过不同的解决方案,但问题仍然存在.希望在任何帮助.这是我的代码.
活动:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
Toolbar toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
// Display the fragment as the main content
getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
}
}
Run Code Online (Sandbox Code Playgroud)
活动XML(activity_settings.xml):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.mypackage.MyActivity">
<include
layout="@layout/app_bar" />
<FrameLayout
android:id="@+id/pref_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/app_bar"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
片段(SettingsFragment.java):
import android.preference.PreferenceFragment;
import android.os.Bundle;
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load …Run Code Online (Sandbox Code Playgroud) 无论如何要在布局xml文件中设置“android.support.v7.widget.Toolbar”一半的预定义属性的高度,例如“?android:attr/actionBarSize”?事实上,我希望我的工具栏的高度是这样的:
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height=("?android:attr/actionBarSize")/2
>
Run Code Online (Sandbox Code Playgroud) android android-layout android-view android-resources android-styles
我有一个CoordinatorLayout包含a CollapsingToolbarLayout和a的RecyclerView.一切都看起来像它应该的样子,除了当我尝试以编程方式滚动到最后一个项目时,它不会一直到底部.相反,它这样做:
我不认为这是一个剪辑问题,因为如果我向下滚动,底部项目完全在那里:
这是主要布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="150dp"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="16dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:toolbarId="@+id/toolbar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:contentInsetStart="72dp"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="@dimen/recyclerview_bottom_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
这是上面屏幕提示的代码:
class TestActivity : AppCompatActivity() {
private val itemNames = listOf("top item", "next item", "yada", "yada yada", "yada yada yada", "second last item", "last item")
private val selectedPosition = itemNames.size - 1
override …Run Code Online (Sandbox Code Playgroud) android android-recyclerview android-collapsingtoolbarlayout
我使用动作栏(原点android,而不是ABS)并将我的视图相对定位在根布局(RelativeLayout)上.为了计算屏幕上的相对位置,我使用了我的视图的getParent().getHeight()/ getParent().getWidth()方法.使用正常的ActionBar,它可以正常工作.我得到父母的真实高度(活动高度 - 动作栏高度,例如800px显示器上的690px).但是如果我使用该splitActionBarWhenNarrow选项并显示底栏,我得到父母的相同高度(例如,在800px屏幕上再次为690px).因此,我的一些以编程方式定位的视图位于底部操作栏下方.
如果没有动作条,我怎样才能获得父级的真实高度?
编辑:
我读onWindowFocusChanged了活动方法的父宽度和高度.
android ×10
android-collapsingtoolbarlayout ×1
android-view ×1
android-xml ×1
bitmap ×1
imageview ×1
xml ×1