The slidingpanelayout dimensions are now manually defined.

There were some problems with slidingpanelayout on some devices.
These were caused by the right pane being bigger than the screen width.
Now there is a manual check to see if this is a tablet layout, and
change the widths of the panes correctly, just like Hangouts does.
captchafix
Florens Douwes 11 years ago
parent feb24a12ea
commit 416c626ec1
  1. 4
      Chan/res/layout/activity_base.xml
  2. 86
      Chan/src/org/floens/chan/ui/activity/BoardActivity.java
  3. 4
      Chan/src/org/floens/chan/ui/activity/WatchSettingsActivity.java
  4. 2
      Chan/src/org/floens/chan/ui/adapter/PostAdapter.java
  5. 2
      Chan/src/org/floens/chan/ui/view/PostView.java
  6. 15
      Chan/src/org/floens/chan/utils/Utils.java

@ -10,13 +10,13 @@
<FrameLayout
android:id="@+id/left_pane"
android:layout_width="320dp"
android:layout_width="100dp"
android:layout_height="match_parent"
android:background="#FFFFFFFF" />
<FrameLayout
android:id="@+id/right_pane"
android:layout_width="360dp"
android:layout_width="100dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#FFE5E5E5" />

@ -11,6 +11,7 @@ import org.floens.chan.core.model.Pin;
import org.floens.chan.core.model.Post;
import org.floens.chan.service.WatchService;
import org.floens.chan.ui.fragment.ThreadFragment;
import org.floens.chan.utils.Utils;
import android.app.ActionBar;
import android.app.AlertDialog;
@ -22,10 +23,13 @@ import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.FrameLayout;
public class BoardActivity extends BaseActivity implements ActionBar.OnNavigationListener {
private Loadable boardLoadable = new Loadable();
@ -49,16 +53,13 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
ft.replace(R.id.right_pane, threadFragment);
ft.commitAllowingStateLoss();
updatePaneState();
updateActionBarState();
final ActionBar actionBar = getActionBar();
actionBar.setListNavigationCallbacks(
new ArrayAdapter<String>(
actionBar.getThemedContext(),
R.layout.board_select_spinner,
android.R.id.text1,
ChanApplication.getBoardManager().getMyBoardsKeys()
), this);
new ArrayAdapter<String>(actionBar.getThemedContext(), R.layout.board_select_spinner,
android.R.id.text1, ChanApplication.getBoardManager().getMyBoardsKeys()), this);
Intent startIntent = getIntent();
Uri startUri = startIntent.getData();
@ -111,8 +112,9 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
@Override
protected void initDrawer() {
pinDrawerListener = new ActionBarDrawerToggle(this, pinDrawer,
R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {};
pinDrawerListener = new ActionBarDrawerToggle(this, pinDrawer, R.drawable.ic_drawer, R.string.drawer_open,
R.string.drawer_close) {
};
super.initDrawer();
}
@ -141,6 +143,44 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
super.onConfigurationChanged(newConfig);
pinDrawerListener.onConfigurationChanged(newConfig);
updateActionBarState();
updatePaneState();
}
private void updatePaneState() {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;
FrameLayout left = (FrameLayout) findViewById(R.id.left_pane);
FrameLayout right = (FrameLayout) findViewById(R.id.right_pane);
LayoutParams leftParams = left.getLayoutParams();
LayoutParams rightParams = right.getLayoutParams();
// Content view dp's:
// Nexus 4 is 384 x 640 dp
// Nexus 7 is 600 x 960 dp
// Nexus 10 is 800 x 1280 dp
if (width < Utils.dp(800)) {
if (width < Utils.dp(400)) {
leftParams.width = width - Utils.dp(30);
} else {
leftParams.width = width - Utils.dp(150);
}
rightParams.width = width;
} else {
leftParams.width = Utils.dp(300);
rightParams.width = width - Utils.dp(300);
}
left.setLayoutParams(leftParams);
right.setLayoutParams(rightParams);
threadPane.requestLayout();
left.requestLayout();
right.requestLayout();
}
@Override
@ -300,7 +340,8 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
}
private void startLoadingBoard(Loadable loadable) {
if (loadable.mode == Loadable.Mode.INVALID) return;
if (loadable.mode == Loadable.Mode.INVALID)
return;
boardLoadable = loadable;
@ -313,7 +354,8 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
}
private void startLoadingThread(Loadable loadable) {
if (loadable.mode == Loadable.Mode.INVALID) return;
if (loadable.mode == Loadable.Mode.INVALID)
return;
Pin pin = ChanApplication.getPinnedManager().findPinByLoadable(loadable);
if (pin != null) {
@ -341,6 +383,7 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
/**
* Handle opening from an external url.
*
* @param startUri
*/
private void handleIntentURI(Uri startUri) {
@ -374,7 +417,8 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
try {
no = Integer.parseInt(parts.get(2));
} catch (NumberFormatException e) {}
} catch (NumberFormatException e) {
}
if (no >= 0 && ChanApplication.getBoardManager().getBoardExists(rawBoard)) {
boardSetByIntent = true;
@ -391,31 +435,26 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
}
private void handleIntentURIFallback(final String url) {
new AlertDialog.Builder(this)
.setTitle(R.string.open_unknown_title)
.setMessage(R.string.open_unknown)
new AlertDialog.Builder(this).setTitle(R.string.open_unknown_title).setMessage(R.string.open_unknown)
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Cancel button
finish();
}
})
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
}).setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Ok button
showUrlOpenPicker(url);
}
})
.setCancelable(false)
.create()
.show();
}).setCancelable(false).create().show();
}
/**
* Set the visual selector to the board. If the user has not set the board as a favorite,
* return false.
* Set the visual selector to the board. If the user has not set the board
* as a favorite, return false.
*
* @param boardValue
* @return true if spinner was set, false otherwise
*/
@ -437,6 +476,3 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
}
}
}

@ -39,7 +39,7 @@ public class WatchSettingsActivity extends Activity implements OnCheckedChangeLi
watchSwitch = (Switch) menu.findItem(R.id.enable_watch_switch).getActionView();
watchSwitch.setOnCheckedChangeListener(this);
watchSwitch.setPadding(0, 0, Utils.dp(this, 14), 0);
watchSwitch.setPadding(0, 0, Utils.dp(14), 0);
setEnabled(ChanPreferences.getWatchEnabled());
@ -90,7 +90,7 @@ public class WatchSettingsActivity extends Activity implements OnCheckedChangeLi
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle savedInstanceState) {
LinearLayout container = new LinearLayout(inflater.getContext());
int p = Utils.dp(inflater.getContext(), 14);
int p = Utils.dp(14);
container.setPadding(p, p, p, p);
TextView text = new TextView(inflater.getContext());

@ -92,7 +92,7 @@ public class PostAdapter extends BaseAdapter {
view.init(threadManager, listView, this);
int padding = context.getResources().getDimensionPixelSize(R.dimen.general_padding);
view.setPadding(padding, padding, padding, padding);
int height = Utils.dp(context, 48f);
int height = Utils.dp(48f);
view.setHeight(height);
view.setGravity(Gravity.CENTER);
return view;

@ -316,7 +316,7 @@ public class PostView extends LinearLayout implements View.OnClickListener, View
lastSeen = new View(context);
lastSeen.setBackgroundColor(0xffff0000);
right.addView(lastSeen, new LayoutParams(LayoutParams.MATCH_PARENT, Utils.dp(context, 6f)));
right.addView(lastSeen, new LayoutParams(LayoutParams.MATCH_PARENT, Utils.dp(6f)));
full.addView(right, matchWrapParams);

@ -1,22 +1,31 @@
package org.floens.chan.utils;
import org.floens.chan.ChanApplication;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Looper;
import android.util.TypedValue;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
public class Utils {
private static DisplayMetrics displayMetrics;
public final static ViewGroup.LayoutParams MATCH_PARAMS = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
public final static ViewGroup.LayoutParams WRAP_PARAMS = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
public final static ViewGroup.LayoutParams MATCH_WRAP_PARAMS = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
public final static ViewGroup.LayoutParams WRAP_MATCH_PARAMS = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
public static int dp(Context context, float dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
public static int dp(float dp) {
// return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
if (displayMetrics == null) {
displayMetrics = ChanApplication.getInstance().getResources().getDisplayMetrics();
}
return (int) (dp * displayMetrics.density);
}
/**

Loading…
Cancel
Save