- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有安卓源代码,我希望幻灯片菜单从右到左打开
这是主要 Activity ,因为我试图正确添加 Gravity,但在这个问题上没有任何帮助
Main Activity
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import com.universal.R;
import com.universal.rss.ServiceStarter;
import com.universal.web.WebviewFragment;
public class MainActivity extends ActionBarActivity implements NavDrawerCallback {
private Toolbar mToolbar;
private NavDrawerFragment mNavigationDrawerFragment;
public static String DATA = "transaction_data";
SharedPreferences prefs;
String mWebUrl = null;
boolean openedByBackPress = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean newDrawer = getResources().getBoolean(R.bool.newdrawer);
if (newDrawer == true){
setContentView(R.layout.activity_main_alternate);
} else {
setContentView(R.layout.activity_main);
Helper.setStatusBarColor(MainActivity.this, getResources().getColor(R.color.myPrimaryDarkColor));
}
mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
mNavigationDrawerFragment = (NavDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_drawer);
if (newDrawer == true){
mNavigationDrawerFragment.setup(R.id.scrimInsetsFrameLayout, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
mNavigationDrawerFragment.getDrawerLayout().setStatusBarBackgroundColor(
getResources().getColor(R.color.myPrimaryDarkColor));
} else {
mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
}
prefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
//setting push enabled
String push = getString(R.string.rss_push_url);
if (null != push && !push.equals("")){
// Create object of SharedPreferences.
boolean firstStart = prefs.getBoolean("firstStart", true);
if (firstStart){
final ServiceStarter alarm = new ServiceStarter();
SharedPreferences.Editor editor= prefs.edit();
alarm.setAlarm(this);
//now, just to be sure, where going to set a value to check if notifications is really enabled
editor.putBoolean("firstStart", false);
//commits your edits
editor.commit();
}
}
//Checking if the user would prefer to show the menu on start
boolean checkBox = prefs.getBoolean("menuOpenOnStart", false);
if (checkBox == true && null == mWebUrl){
mNavigationDrawerFragment.openDrawer();
}
// New imageloader
Helper.initializeImageLoader(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//getMenuInflater().inflate(R.menu.rss_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public void onNavigationDrawerItemSelected(int position, NavItem item){
Fragment fragment;
try {
fragment = item.getFragment().newInstance();
if (fragment != null && null == mWebUrl) {
//adding the data
Bundle bundle = new Bundle();
String extra = item.getData();
bundle.putString(DATA, extra);
fragment.setArguments(bundle);
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.commit();
setTitle(item.getText());
if (null != MainActivity.this.getSupportActionBar() && null != MainActivity.this.getSupportActionBar().getCustomView()){
MainActivity.this.getSupportActionBar().setDisplayOptions(
ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);
}
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@Override
public void onBackPressed() {
Fragment webview = getSupportFragmentManager().findFragmentById(R.id.container);
if (mNavigationDrawerFragment.isDrawerOpen(Gravity.RIGHT)) {
mNavigationDrawerFragment.closeDrawer(Gravity.RIGHT);
} else if (webview instanceof WebviewFragment) {
boolean goback = ((WebviewFragment)webview).canGoBack();
if (!goback)
super.onBackPressed();
} else {
super.onBackPressed();
}
}
NavDrawerAdapter
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
public class NavDrawerAdapter extends
RecyclerView.Adapter<NavDrawerAdapter.ViewHolder> {
private List<NavItem> mData;
private NavDrawerCallback mNavDrawerCallbacks;
private NavDrawerFragment mContext;
private int mSelectedPosition;
private int mTouchedPosition;
public NavDrawerAdapter(List<NavItem> data, NavDrawerFragment context) {
mData = data;
mContext = context;
}
public NavDrawerCallback getNavigationDrawerCallbacks() {
return mNavDrawerCallbacks;
}
public void setNavigationDrawerCallbacks(NavDrawerCallback navDrawerCallback) {
mNavDrawerCallbacks = navDrawerCallback;
}
@Override
public NavDrawerAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup,
int i) {
if (i == 0) {
return new ViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.drawer_top, viewGroup, false));
} else if (i == 1) {
return new ViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.drawer_section, viewGroup, false));
}
View v = LayoutInflater.from(viewGroup.getContext()).inflate(
R.layout.drawer_row, viewGroup, false);
return new ViewHolder(v);
}
@Override
public int getItemViewType(int position) {
if (mData.get(position).getType() == NavItem.TOP){
return 0;
} else if (mData.get(position).getType() == NavItem.SECTION) {
return 1;
} else {
return 2;
}
}
@Override
public void onBindViewHolder(NavDrawerAdapter.ViewHolder viewHolder,
final int i) {
Drawable drawable = null;
if (mData.get(i).getDrawable() != 0) {
drawable = mContext.getResources().getDrawable(
mData.get(i).getDrawable());
}
if (mData.get(i).getType() == NavItem.ITEM) {
setText(viewHolder.textViewItem, i, drawable);
setBackgroundColor(i, viewHolder);
} else if (mData.get(i).getType() == NavItem.EXTRA) {
viewHolder.textViewExtra.setVisibility(View.VISIBLE);
viewHolder.textViewItem.setVisibility(View.GONE);
setText(viewHolder.textViewExtra, i, drawable);
setBackgroundColor(i, viewHolder);
viewHolder.setIsRecyclable(false);
} else if (mData.get(i).getType() == NavItem.SECTION) {
setText(viewHolder.textViewSection, i, drawable);
viewHolder.setIsRecyclable(false);
}
}
private void setBackgroundColor(int i,
NavDrawerAdapter.ViewHolder viewHolder) {
if (mSelectedPosition == i || mTouchedPosition == i) {
viewHolder.itemView.setBackgroundColor(viewHolder.itemView
.getContext().getResources()
.getColor(R.color.selected_gray));
} else {
viewHolder.itemView.setBackgroundColor(Color.TRANSPARENT);
}
}
private void setText(TextView textView, final int i, Drawable drawable) {
textView.setText(mData.get(i).getText());
textView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null,
null);
textView.setOnTouchListener(new View.OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchPosition(i);
return false;
case MotionEvent.ACTION_CANCEL:
touchPosition(-1);
return false;
case MotionEvent.ACTION_MOVE:
return false;
case MotionEvent.ACTION_UP:
touchPosition(-1);
return false;
}
return true;
}
});
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mNavDrawerCallbacks != null)
mNavDrawerCallbacks.onNavigationDrawerItemSelected(i,
mData.get(i));
}
});
}
private void touchPosition(int position) {
int lastPosition = mTouchedPosition;
mTouchedPosition = position;
if (lastPosition >= 0)
notifyItemChanged(lastPosition);
if (position >= 0)
notifyItemChanged(position);
}
public void selectPosition(int position) {
int lastPosition = mSelectedPosition;
mSelectedPosition = position;
notifyItemChanged(lastPosition);
notifyItemChanged(position);
}
@Override
public int getItemCount() {
return mData != null ? mData.size() : 0;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView textViewItem;
public TextView textViewSection;
public TextView textViewExtra;
public ViewHolder(View itemView) {
super(itemView);
textViewItem = (TextView) itemView.findViewById(R.id.item_name);
textViewExtra = (TextView) itemView.findViewById(R.id.extra_name);
textViewSection = (TextView) itemView
.findViewById(R.id.section_name);
}
}
}
NavDrawerFragment
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
public class NavDrawerFragment extends Fragment implements NavDrawerCallback {
private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
private NavDrawerCallback mCallbacks;
private RecyclerView mDrawerList;
private View mFragmentContainerView;
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mActionBarDrawerToggle;
private int mCurrentSelectedPosition;
private List<NavItem> mConfiguration;
public void closeDrawer(int gravity) {
mDrawerLayout.closeDrawer(gravity);
}
public void openDrawer(int gravity) {
mDrawerLayout.openDrawer(gravity);
}
public boolean isDrawerOpen(int gravity) {
return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(gravity);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view;
view = inflater.inflate(R.layout.drawer_fragment, container, false);
mDrawerList = (RecyclerView) view.findViewById(R.id.drawerList);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mDrawerList.setLayoutManager(layoutManager);
mDrawerList.setHasFixedSize(true);
final List<NavItem> NavItems = getConfiguration();
NavDrawerAdapter adapter = new NavDrawerAdapter(NavItems, NavDrawerFragment.this);
adapter.setNavigationDrawerCallbacks(this);
mDrawerList.setAdapter(adapter);
selectItem(mCurrentSelectedPosition, NavItems.get(mCurrentSelectedPosition));
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallbacks = (NavDrawerCallback) activity;
} catch (ClassCastException e) {
throw new ClassCastException("Activity must implement NavDrawerCallback.");
}
}
public ActionBarDrawerToggle getActionBarDrawerToggle() {
return mActionBarDrawerToggle;
}
public void setActionBarDrawerToggle(ActionBarDrawerToggle actionBarDrawerToggle) {
mActionBarDrawerToggle = actionBarDrawerToggle;
}
public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {
mFragmentContainerView = getActivity().findViewById(fragmentId);
mDrawerLayout = drawerLayout;
mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
if (!isAdded()) return;
getActivity().invalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (!isAdded()) return;
getActivity().invalidateOptionsMenu();
}
};
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mActionBarDrawerToggle.syncState();
}
});
mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
//TODO This works (hides the drawer if there is only 1 item), but makes settings and favorites unreachable
boolean newDrawer = getResources().getBoolean(R.bool.newdrawer);
if (newDrawer == false && getConfiguration().size() == 1){
mActionBarDrawerToggle.setDrawerIndicatorEnabled(false);
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
if (newDrawer == true && getConfiguration().size() == 2){
mActionBarDrawerToggle.setDrawerIndicatorEnabled(false);
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
}
public void openDrawer() {
mDrawerLayout.openDrawer(mFragmentContainerView);
}
public void closeDrawer() {
mDrawerLayout.closeDrawer(mFragmentContainerView);
}
@Override
public void onDetach() {
super.onDetach();
mCallbacks = null;
}
void selectItem(int position, NavItem item) {
//If on start, item is section, change it.
if (item.getType() == NavItem.SECTION || item.getType() == NavItem.TOP){
position = position + 1;
item = getConfiguration().get(position);
selectItem(position, item);
return;
}
mCurrentSelectedPosition = position;
if (mDrawerLayout != null) {
mDrawerLayout.closeDrawer(mFragmentContainerView);
}
if (mCallbacks != null) {
mCallbacks.onNavigationDrawerItemSelected(position, item);
}
((NavDrawerAdapter) mDrawerList.getAdapter()).selectPosition(position);
}
public boolean isDrawerOpen() {
return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mActionBarDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition);
}
@Override
public void onNavigationDrawerItemSelected(int position, NavItem item) {
//TODO we can also call this method here, but that won't set an initial item.
//mCallbacks.onNavigationDrawerItemSelected(position, item);
if (item.getType() != NavItem.SECTION){
selectItem(position, item);
}
}
public DrawerLayout getDrawerLayout() {
return mDrawerLayout;
}
public void setDrawerLayout(DrawerLayout drawerLayout) {
mDrawerLayout = drawerLayout;
}
private List<NavItem> getConfiguration(){
if (null == mConfiguration){
mConfiguration = Config.configuration();
boolean newDrawer = getResources().getBoolean(R.bool.newdrawer);
if (newDrawer == true){
mConfiguration.add(0, new NavItem("Header", NavItem.TOP));
}
}
return mConfiguration;
}
}
布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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_gravity="right"
android:layout_height="match_parent">
<include
android:id="@+id/toolbar_actionbar"
layout="@layout/toolbar_default"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="end"
android:layout_below="@+id/toolbar_actionbar">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!-- android:layout_marginTop="?android:attr/actionBarSize"-->
<fragment
android:id="@+id/fragment_drawer"
android:name="com.universal.NavDrawerFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="end"
app:layout="@layout/drawer_fragment"/>
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>
最佳答案
看看这个对我有用
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/container_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include
android:id="@+id/app_toolbar"
layout="@layout/layout_toolbar"/>
</LinearLayout>
<FrameLayout
android:id="@+id/frame_main_to_replcae_menu"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
<fragment
android:id="@+id/fragment_navigation_drawer"
android:name="com.views.fragments.NavigationDrawerFragment"
android:layout_width="@dimen/nav_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer"
tools:layout="@layout/fragment_navigation_drawer"/>
<fragment
android:id="@+id/fragment_profile"
android:name="com.views.fragments.ProfileFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="end"
app:layout="@layout/fragment_profile"
tools:layout="@layout/fragment_profile"/>
</android.support.v4.widget.DrawerLayout>
关于java - Android 从右到左滑动菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31109747/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!