2017-04-04 121 views
0

我差不多完成了一个应用程序,在该应用程序中,我使用底部导航栏在不同的布局(不包括活动,如果相关)之间切换,以及一些自定义布局适用于手机和平板电脑的横向方向。当我在模拟器中运行应用程序时,我的应用程序的行为与预期相同,但当我导出一个apk在我的设备(本例中为手机)上测试时,该应用程序根本不会切换到横向模式。在仿真器中按照预期方向工作,但不在设备上

让我知道你是否希望我粘贴我认为相关的部分代码 - 我不知道从哪里开始解决这个问题。

编辑:这里是清单和活动文件:

清单:

<?xml version="1.0" encoding="utf-8"?> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".StoryListActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".StoryDetailActivity" 
     android:label="@string/title_story_detail" 
     android:parentActivityName=".StoryListActivity" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.compy.someappname.StoryListActivity" /> 
    </activity> 
</application> 

活动:

公共类StoryListAct ivity扩展AppCompatActivity {

private FrameLayout mainFrameLayout; 
private FrameLayout shopFrameLayout; 
private FrameLayout infoFrameLayout; 

/** 
* Whether or not the activity is in two-pane mode, i.e. running on a tablet 
* device. 
*/ 

private boolean mTwoPane; 

private int visiblePart; 

protected void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    if (mainFrameLayout.getVisibility() == View.VISIBLE) { 
     savedInstanceState.putInt("visiblePart", 0); 
    } else if (shopFrameLayout.getVisibility() == View.VISIBLE) { 
     savedInstanceState.putInt("visiblePart", 1); 
    } else if (infoFrameLayout.getVisibility() == View.VISIBLE) { 
     savedInstanceState.putInt("visiblePart", 2); 
    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState != null){ 
     visiblePart = savedInstanceState.getInt("visiblePart"); 
    } 

    setContentView(R.layout.activity_story_list); 

    mainFrameLayout = (FrameLayout) findViewById(R.id.mainFrameLayout); 
    shopFrameLayout = (FrameLayout) findViewById(R.id.shopFrameLayout); 
    infoFrameLayout = (FrameLayout) findViewById(R.id.infoFrameLayout); 
    appBarLayout = (AppBarLayout) findViewById(R.id.app_bar); 
    TextView titleTextView = (TextView) findViewById(R.id.titleTextView); 
    TextView titleTextView2 = (TextView) findViewById(R.id.titleTextView2); 
    Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/Ovo-Regular.ttf"); 
    titleTextView.setTypeface(typeface); 
    titleTextView2.setTypeface(typeface); 

    if (visiblePart == 0) { 
     mainFrameLayout.setVisibility(View.VISIBLE); 
     shopFrameLayout.setVisibility(View.GONE); 
     infoFrameLayout.setVisibility(View.GONE); 
    } else if (visiblePart == 1) { 
     mainFrameLayout.setVisibility(View.GONE); 
     shopFrameLayout.setVisibility(View.VISIBLE); 
     infoFrameLayout.setVisibility(View.GONE); 
    } else if (visiblePart == 2) { 
     mainFrameLayout.setVisibility(View.GONE); 
     shopFrameLayout.setVisibility(View.GONE); 
     infoFrameLayout.setVisibility(View.VISIBLE); 
    } 


    BottomNavigationView bottomNavigationView = (BottomNavigationView) 
      findViewById(R.id.bottom_navigation); 

    bottomNavigationView.setOnNavigationItemSelectedListener(
      new BottomNavigationView.OnNavigationItemSelectedListener() { 
       @Override 
       public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
        switch (item.getItemId()) { 
         case R.id.action_main: 
          mainFrameLayout.setVisibility(VISIBLE); 
          shopFrameLayout.setVisibility(GONE); 
          infoFrameLayout.setVisibility(GONE); 
          break; 
         case R.id.action_shop: 
          mainFrameLayout.setVisibility(GONE); 
          shopFrameLayout.setVisibility(VISIBLE); 
          infoFrameLayout.setVisibility(GONE); 
          break; 
         case R.id.action_info: 
          mainFrameLayout.setVisibility(GONE); 
          shopFrameLayout.setVisibility(GONE); 
          infoFrameLayout.setVisibility(VISIBLE); 
          break; 
        } 
        return false; 
       } 
      }); 

    View recyclerView = findViewById(R.id.story_list); 
    assert recyclerView != null; 
    setupRecyclerView((RecyclerView) recyclerView); 

    if (findViewById(R.id.story_detail_container) != null) { 
     // The detail container view will be present only in the 
     // large-screen layouts (res/values-w900dp). 
     // If this view is present, then the 
     // activity should be in two-pane mode. 
     mTwoPane = true; 
    } 
} 



private void setupRecyclerView(@NonNull RecyclerView recyclerView) { 
    recyclerView.setAdapter(new SimpleItemRecyclerViewAdapter(DummyContent.ITEMS)); 
} 

public class SimpleItemRecyclerViewAdapter 
     extends RecyclerView.Adapter<SimpleItemRecyclerViewAdapter.ViewHolder> { 

    private final List<DummyContent.DummyItem> mValues; 

    public SimpleItemRecyclerViewAdapter(List<DummyContent.DummyItem> items) { 
     mValues = items; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.story_list_content, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, int position) { 
     holder.mItem = mValues.get(position); 
     holder.mIdView.setText(mValues.get(position).id); 
     holder.mContentView.setText(mValues.get(position).story_title); 


     holder.mView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (mTwoPane) { 
        Bundle arguments = new Bundle(); 
        arguments.putString(StoryDetailFragment.ARG_ITEM_ID, holder.mItem.id); 
        StoryDetailFragment fragment = new StoryDetailFragment(); 
        fragment.setArguments(arguments); 
        getSupportFragmentManager().beginTransaction() 
          .replace(R.id.story_detail_container, fragment) 
          .commit(); 
       } else { 
        Context context = v.getContext(); 
        Intent intent = new Intent(context, StoryDetailActivity.class); 
        intent.putExtra(StoryDetailFragment.ARG_ITEM_ID, holder.mItem.id); 

        context.startActivity(intent); 
       } 
      } 
     }); 
    } 

    @Override 
    public int getItemCount() { 
     return mValues.size(); 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder { 
     public final View mView; 
     public final TextView mIdView; 
     public final TextView mContentView; 
     public DummyContent.DummyItem mItem; 

     public ViewHolder(View view) { 
      super(view); 
      mView = view; 
      mIdView = (TextView) view.findViewById(R.id.id); 
      mContentView = (TextView) view.findViewById(R.id.content); 
      Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/Ovo-Regular.ttf"); 
      mIdView.setTypeface(typeface); 
      mContentView.setTypeface(typeface); 
     } 

     @Override 
     public String toString() { 
      return super.toString() + " '" + mContentView.getText() + "'"; 
     } 
    } 
} 

}

+0

安置自己的活动代码和你的AndroidManifest.xml –

+0

傻之一:在您的手机的方向纵向锁定? – BhalchandraSW

+0

愚蠢但合法 - 但它是在自动旋转 – wxzwxe

回答

0

你可以试试这个

/** 
    * Getting screen orientation and ON rotation if it is OFF 
    */ 
    private void rotationON() { 
     if (Settings.System.getInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 0) { 
      Settings.System.putInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 1); 
     } 
    } 

    /** 
    * Getting screen orientation and Off rotation if it is ON 
    */ 
    private void rotationOFF() { 
     if (Settings.System.getInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 1) { 
      Settings.System.putInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0); 
     } 
    } 
+0

没有打破我的应用程序在模拟器中,但遗憾的是没有任何改变的设备行为 – wxzwxe

+0

在设备设置,是它自动旋转或锁定? – DkThakur

+0

记得检查 - 自动旋转 – wxzwxe

相关问题