forked from extern/Unexpected-Keyboard
Improve emoji pane layout
The measurement function was wrong in some situations. Set a width for columns and properly configure the GridView.
This commit is contained in:
parent
87d21685ca
commit
199ca5cf03
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:hardwareAccelerated="false">
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:hardwareAccelerated="false">
|
||||||
<juloo.keyboard2.EmojiGroupButtonsBar android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
|
<juloo.keyboard2.EmojiGroupButtonsBar android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
|
||||||
<juloo.keyboard2.EmojiGridView android:id="@+id/emoji_grid" android:background="?attr/colorKeyboard" android:layout_width="fill_parent" android:layout_height="@dimen/emoji_grid_height"/>
|
<juloo.keyboard2.EmojiGridView android:id="@+id/emoji_grid" android:layout_width="fill_parent" android:layout_height="@dimen/emoji_grid_height" android:orientation="vertical" android:numColumns="auto_fit" android:columnWidth="45sp" android:background="?attr/colorKeyboard"/>
|
||||||
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content">
|
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content">
|
||||||
<juloo.keyboard2.EmojiKeyButton style="@style/emojiKeyButton" key="switch_back_emoji"/>
|
<juloo.keyboard2.EmojiKeyButton style="@style/emojiKeyButton" key="switch_back_emoji"/>
|
||||||
<juloo.keyboard2.EmojiKeyButton style="@style/emojiKeyButton" android:layout_weight="4" key="space"/>
|
<juloo.keyboard2.EmojiKeyButton style="@style/emojiKeyButton" android:layout_weight="4" key="space"/>
|
||||||
|
@ -17,8 +17,10 @@
|
|||||||
<item name="android:textColor">?attr/emoji_key_text</item>
|
<item name="android:textColor">?attr/emoji_key_text</item>
|
||||||
<item name="android:textSize">18dp</item>
|
<item name="android:textSize">18dp</item>
|
||||||
</style>
|
</style>
|
||||||
<!-- Passed to TextView.setTextAppearance -->
|
|
||||||
<style name="emojiGridButton">
|
<style name="emojiGridButton">
|
||||||
|
<item name="android:layout_width">fill_parent</item>
|
||||||
|
<item name="android:layout_height">fill_parent</item>
|
||||||
|
<item name="android:gravity">center</item>
|
||||||
<item name="android:textSize">@dimen/emoji_text_size</item>
|
<item name="android:textSize">@dimen/emoji_text_size</item>
|
||||||
<item name="android:textColor">?attr/emoji_color</item>
|
<item name="android:textColor">?attr/emoji_color</item>
|
||||||
</style>
|
</style>
|
||||||
|
@ -2,9 +2,8 @@ package juloo.keyboard2;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.graphics.Typeface;
|
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.Gravity;
|
import android.view.ContextThemeWrapper;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
@ -14,16 +13,14 @@ import android.widget.TextView;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class EmojiGridView extends GridView
|
public class EmojiGridView extends GridView
|
||||||
implements GridView.OnItemClickListener
|
implements GridView.OnItemClickListener
|
||||||
{
|
{
|
||||||
public static final int GROUP_LAST_USE = -1;
|
public static final int GROUP_LAST_USE = -1;
|
||||||
|
|
||||||
public static final int COLUMN_WIDTH = 192;
|
|
||||||
|
|
||||||
private static final String LAST_USE_PREF = "emoji_last_use";
|
private static final String LAST_USE_PREF = "emoji_last_use";
|
||||||
|
|
||||||
private Emoji[] _emojiArray;
|
private Emoji[] _emojiArray;
|
||||||
@ -38,7 +35,6 @@ public class EmojiGridView extends GridView
|
|||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
Emoji.init(context.getResources());
|
Emoji.init(context.getResources());
|
||||||
setOnItemClickListener(this);
|
setOnItemClickListener(this);
|
||||||
setColumnWidth(COLUMN_WIDTH);
|
|
||||||
loadLastUsed();
|
loadLastUsed();
|
||||||
setEmojiGroup((_lastUsed.size() == 0) ? 0 : GROUP_LAST_USE);
|
setEmojiGroup((_lastUsed.size() == 0) ? 0 : GROUP_LAST_USE);
|
||||||
}
|
}
|
||||||
@ -58,13 +54,6 @@ public class EmojiGridView extends GridView
|
|||||||
saveLastUsed(); // TODO: opti
|
saveLastUsed(); // TODO: opti
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onMeasure(int wSpec, int hSpec)
|
|
||||||
{
|
|
||||||
super.onMeasure(wSpec, hSpec);
|
|
||||||
setNumColumns(getMeasuredWidth() / COLUMN_WIDTH);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Emoji[] getLastEmojis()
|
private Emoji[] getLastEmojis()
|
||||||
{
|
{
|
||||||
final HashMap<Emoji, Integer> map = _lastUsed;
|
final HashMap<Emoji, Integer> map = _lastUsed;
|
||||||
@ -121,14 +110,11 @@ public class EmojiGridView extends GridView
|
|||||||
return getContext().getSharedPreferences("emoji_last_use", Context.MODE_PRIVATE);
|
return getContext().getSharedPreferences("emoji_last_use", Context.MODE_PRIVATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class EmojiView extends TextView
|
static class EmojiView extends TextView
|
||||||
{
|
{
|
||||||
public EmojiView(Context context)
|
public EmojiView(Context context)
|
||||||
{
|
{
|
||||||
super(context);
|
super(context);
|
||||||
setTextAppearance(context, R.style.emojiGridButton);
|
|
||||||
setGravity(Gravity.CENTER);
|
|
||||||
setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT, GridView.LayoutParams.WRAP_CONTENT));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEmoji(Emoji emoji)
|
public void setEmoji(Emoji emoji)
|
||||||
@ -137,15 +123,15 @@ public class EmojiGridView extends GridView
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class EmojiViewAdpater extends BaseAdapter
|
static class EmojiViewAdpater extends BaseAdapter
|
||||||
{
|
{
|
||||||
private Context _context;
|
Context _button_context;
|
||||||
|
|
||||||
private Emoji[] _emojiArray;
|
Emoji[] _emojiArray;
|
||||||
|
|
||||||
public EmojiViewAdpater(Context context, Emoji[] emojiArray)
|
public EmojiViewAdpater(Context context, Emoji[] emojiArray)
|
||||||
{
|
{
|
||||||
_context = context;
|
_button_context = new ContextThemeWrapper(context, R.style.emojiGridButton);
|
||||||
_emojiArray = emojiArray;
|
_emojiArray = emojiArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,9 +157,9 @@ public class EmojiGridView extends GridView
|
|||||||
EmojiView view = (EmojiView)convertView;
|
EmojiView view = (EmojiView)convertView;
|
||||||
|
|
||||||
if (view == null)
|
if (view == null)
|
||||||
view = new EmojiView(_context);
|
view = new EmojiView(_button_context);
|
||||||
view.setEmoji(_emojiArray[pos]);
|
view.setEmoji(_emojiArray[pos]);
|
||||||
return (view);
|
return view;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,18 @@ package juloo.keyboard2;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.widget.LinearLayout;
|
import android.view.ContextThemeWrapper;
|
||||||
|
import android.view.MotionEvent;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
import android.widget.LinearLayout.LayoutParams;
|
import android.widget.LinearLayout.LayoutParams;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
public class EmojiGroupButtonsBar extends LinearLayout
|
public class EmojiGroupButtonsBar extends LinearLayout
|
||||||
{
|
{
|
||||||
|
private EmojiGridView _emoji_grid = null;
|
||||||
|
|
||||||
public EmojiGroupButtonsBar(Context context, AttributeSet attrs)
|
public EmojiGroupButtonsBar(Context context, AttributeSet attrs)
|
||||||
{
|
{
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
@ -19,8 +26,37 @@ public class EmojiGroupButtonsBar extends LinearLayout
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void add_group(int id, String symbol)
|
void add_group(int id, String symbol)
|
||||||
{
|
{
|
||||||
addView(new EmojiTypeButton(getContext(), id, symbol), new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.f));
|
addView(this.new EmojiGroupButton(getContext(), id, symbol),
|
||||||
|
new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.f));
|
||||||
|
}
|
||||||
|
|
||||||
|
EmojiGridView get_emoji_grid()
|
||||||
|
{
|
||||||
|
if (_emoji_grid == null)
|
||||||
|
_emoji_grid = (EmojiGridView)((ViewGroup)(getParent())).findViewById(R.id.emoji_grid);
|
||||||
|
return _emoji_grid;
|
||||||
|
}
|
||||||
|
|
||||||
|
class EmojiGroupButton extends Button implements View.OnTouchListener
|
||||||
|
{
|
||||||
|
int _group_id;
|
||||||
|
|
||||||
|
public EmojiGroupButton(Context context, int group_id, String symbol)
|
||||||
|
{
|
||||||
|
super(new ContextThemeWrapper(context, R.style.emojiTypeButton), null, 0);
|
||||||
|
_group_id = group_id;
|
||||||
|
setText(symbol);
|
||||||
|
setOnTouchListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onTouch(View view, MotionEvent event)
|
||||||
|
{
|
||||||
|
if (event.getAction() != MotionEvent.ACTION_DOWN)
|
||||||
|
return false;
|
||||||
|
get_emoji_grid().setEmojiGroup(_group_id);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
package juloo.keyboard2;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.view.ContextThemeWrapper;
|
|
||||||
import android.view.MotionEvent;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.Button;
|
|
||||||
|
|
||||||
/* Emoji "types" are groups. This class is misnamed. */
|
|
||||||
|
|
||||||
public class EmojiTypeButton extends Button
|
|
||||||
implements View.OnTouchListener
|
|
||||||
{
|
|
||||||
private int _emojiType;
|
|
||||||
|
|
||||||
static private final int DEFAULT_GROUP = 0;
|
|
||||||
|
|
||||||
public EmojiTypeButton(Context context, int group_id, String symbol)
|
|
||||||
{
|
|
||||||
super(new ContextThemeWrapper(context, R.style.emojiTypeButton), null, 0);
|
|
||||||
_emojiType = group_id;
|
|
||||||
setText(symbol);
|
|
||||||
setOnTouchListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean onTouch(View view, MotionEvent event)
|
|
||||||
{
|
|
||||||
EmojiGridView emojiGrid;
|
|
||||||
|
|
||||||
if (event.getAction() != MotionEvent.ACTION_DOWN)
|
|
||||||
return (false);
|
|
||||||
emojiGrid = (EmojiGridView)((ViewGroup)(getParent().getParent())).findViewById(R.id.emoji_grid);
|
|
||||||
emojiGrid.setEmojiGroup(_emojiType);
|
|
||||||
return (true);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user