add compatibility with small screen devices

This commit is contained in:
Andrew Dolgov 2011-11-26 10:11:24 +03:00
parent 131dec0c1c
commit 673b31f274
2 changed files with 95 additions and 12 deletions

30
res/layout/main_small.xml Normal file
View File

@ -0,0 +1,30 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:id="@+id/main_flipper">
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:id="@+id/loading_container">
<ProgressBar android:id="@+id/loading_progress" android:layout_height="wrap_content" android:layout_width="wrap_content" ></ProgressBar>
<TextView android:text="@string/loading_message" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/loading_message"></TextView>
</LinearLayout>
<LinearLayout android:layout_height="fill_parent" android:orientation="horizontal" android:id="@+id/main" android:layout_width="fill_parent">
<FrameLayout
android:id="@+id/feeds_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<FrameLayout
android:id="@+id/headlines_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<FrameLayout
android:id="@+id/article_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
</LinearLayout>
</FrameLayout>

View File

@ -12,6 +12,7 @@ import android.preference.PreferenceManager;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.Display;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
@ -34,6 +35,7 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe
private Timer m_refreshTimer;
private RefreshTask m_refreshTask;
private Menu m_menu;
private boolean m_smallScreenMode;
private boolean m_unreadOnly = true;
private class RefreshTask extends TimerTask {
@ -92,7 +94,18 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe
m_selectedArticle = savedInstanceState.getParcelable("selectedArticle");
}
setContentView(R.layout.main);
Display display = getWindowManager().getDefaultDisplay();
if (display.getWidth() > 1000 && display.getHeight() >= 600) {
m_smallScreenMode = false;
setContentView(R.layout.main);
} else {
m_smallScreenMode = true;
setContentView(R.layout.main_small);
}
if (android.os.Build.VERSION.SDK_INT > 10) {
LayoutTransition transitioner = new LayoutTransition();
@ -100,10 +113,23 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe
layout.setLayoutTransition(transitioner);
}
if (m_selectedArticle == null)
findViewById(R.id.article_fragment).setVisibility(View.GONE);
else
findViewById(R.id.feeds_fragment).setVisibility(View.GONE);
if (m_smallScreenMode) {
if (m_selectedArticle != null) {
findViewById(R.id.feeds_fragment).setVisibility(View.GONE);
findViewById(R.id.headlines_fragment).setVisibility(View.GONE);
} else if (m_activeFeed != null) {
findViewById(R.id.feeds_fragment).setVisibility(View.GONE);
findViewById(R.id.article_fragment).setVisibility(View.GONE);
} else {
findViewById(R.id.headlines_fragment).setVisibility(View.GONE);
findViewById(R.id.article_fragment).setVisibility(View.GONE);
}
} else {
if (m_selectedArticle == null)
findViewById(R.id.article_fragment).setVisibility(View.GONE);
else
findViewById(R.id.feeds_fragment).setVisibility(View.GONE);
}
if (m_sessionId != null) {
loginSuccess();
@ -195,10 +221,21 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe
if (keyCode == KeyEvent.KEYCODE_BACK) {
Log.d(TAG, "Overriding back button");
if (m_selectedArticle != null) {
closeArticle();
if (m_smallScreenMode) {
if (m_selectedArticle != null) {
closeArticle();
} else if (m_activeFeed != null) {
findViewById(R.id.headlines_fragment).setVisibility(View.GONE);
findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE);
} else {
finish();
}
} else {
finish();
if (m_selectedArticle != null) {
closeArticle();
} else {
finish();
}
}
return false;
@ -258,8 +295,14 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe
}
public void closeArticle() {
findViewById(R.id.article_fragment).setVisibility(View.GONE);
findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE);
if (m_smallScreenMode) {
findViewById(R.id.article_fragment).setVisibility(View.GONE);
findViewById(R.id.headlines_fragment).setVisibility(View.VISIBLE);
} else {
findViewById(R.id.article_fragment).setVisibility(View.GONE);
findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE);
}
m_selectedArticle = null;
@ -395,6 +438,11 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe
initMainMenu();
if (m_smallScreenMode) {
findViewById(R.id.feeds_fragment).setVisibility(View.GONE);
findViewById(R.id.headlines_fragment).setVisibility(View.VISIBLE);
}
if (!append) {
HeadlinesFragment hf = new HeadlinesFragment();
@ -420,8 +468,13 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe
ft.replace(R.id.article_fragment, frag);
ft.commit();
findViewById(R.id.feeds_fragment).setVisibility(View.GONE);
findViewById(R.id.article_fragment).setVisibility(View.VISIBLE);
if (m_smallScreenMode) {
findViewById(R.id.headlines_fragment).setVisibility(View.GONE);
findViewById(R.id.article_fragment).setVisibility(View.VISIBLE);
} else {
findViewById(R.id.feeds_fragment).setVisibility(View.GONE);
findViewById(R.id.article_fragment).setVisibility(View.VISIBLE);
}
}