mirror of
https://github.com/Julow/Unexpected-Keyboard.git
synced 2025-06-24 19:51:28 +02:00
Fix high keyboard height making it overflows
The calculation for the size of each rows now avoid making the keyboard bigger than the screen if the Keyboard Height option is unusually high. The height calculation with the default settings is changed slightly, it is now assuming that a layout is 3.95 rows high instead of 4. This is because the bottom row is usually 0.95% the size of other rows.
This commit is contained in:
parent
9ab099175d
commit
2a50a4a129
@ -42,7 +42,8 @@ public final class Config
|
||||
public long longPressInterval;
|
||||
public boolean keyrepeat_enabled;
|
||||
public float margin_bottom;
|
||||
public float keyHeight;
|
||||
public int keyboardHeightPercent;
|
||||
public int screenHeightPixels;
|
||||
public float horizontal_margin;
|
||||
public float key_vertical_margin;
|
||||
public float key_horizontal_margin;
|
||||
@ -110,9 +111,6 @@ public final class Config
|
||||
orientation_landscape = res.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
|
||||
foldable_unfolded = foldableUnfolded;
|
||||
|
||||
// The height of the keyboard is relative to the height of the screen.
|
||||
// This is the height of the keyboard if it have 4 rows.
|
||||
int keyboardHeightPercent;
|
||||
float characterSizeScale = 1.f;
|
||||
String show_numpad_s = _prefs.getString("show_numpad", "never");
|
||||
show_numpad = "always".equals(show_numpad_s);
|
||||
@ -159,9 +157,7 @@ public final class Config
|
||||
borderConfig = _prefs.getBoolean("border_config", false);
|
||||
customBorderRadius = _prefs.getInt("custom_border_radius", 0) / 100.f;
|
||||
customBorderLineWidth = get_dip_pref(dm, "custom_border_line_width", 0);
|
||||
// Do not substract key_vertical_margin from keyHeight because this is done
|
||||
// during rendering.
|
||||
keyHeight = dm.heightPixels * keyboardHeightPercent / 100 / 4;
|
||||
screenHeightPixels = dm.heightPixels;
|
||||
horizontal_margin =
|
||||
get_dip_pref_oriented(dm, "horizontal_margin", 3, 28);
|
||||
double_tap_lock_shift = _prefs.getBoolean("lock_double_tap", false);
|
||||
|
@ -229,7 +229,7 @@ public class Keyboard2View extends View
|
||||
return null;
|
||||
for (KeyboardData.Row row : _keyboard.rows)
|
||||
{
|
||||
y += (row.shift + row.height) * _config.keyHeight;
|
||||
y += (row.shift + row.height) * _tc.row_height;
|
||||
if (ty < y)
|
||||
return row;
|
||||
}
|
||||
@ -309,19 +309,19 @@ public class Keyboard2View extends View
|
||||
_marginRight = Math.max(_config.horizontal_margin, insets_right);
|
||||
_marginBottom = _config.margin_bottom + insets_bottom;
|
||||
_keyWidth = (width - _marginLeft - _marginRight) / _keyboard.keysWidth;
|
||||
_tc = new Theme.Computed(_theme, _config, _keyWidth);
|
||||
_tc = new Theme.Computed(_theme, _config, _keyWidth, _keyboard);
|
||||
// Compute the size of labels based on the width or the height of keys. The
|
||||
// margin around keys is taken into account. Keys normal aspect ratio is
|
||||
// assumed to be 3/2. It's generally more, the width computation is useful
|
||||
// when the keyboard is unusually high.
|
||||
float labelBaseSize = Math.min(
|
||||
_config.keyHeight - _tc.vertical_margin,
|
||||
_tc.row_height - _tc.vertical_margin,
|
||||
_keyWidth * 3/2 - _tc.horizontal_margin
|
||||
) * _config.characterSize;
|
||||
_mainLabelSize = labelBaseSize * _config.labelTextSize;
|
||||
_subLabelSize = labelBaseSize * _config.sublabelTextSize;
|
||||
int height =
|
||||
(int)(_config.keyHeight * _keyboard.keysHeight
|
||||
(int)(_tc.row_height * _keyboard.keysHeight
|
||||
+ _config.marginTop + _marginBottom);
|
||||
setMeasuredDimension(width, height);
|
||||
}
|
||||
@ -364,9 +364,9 @@ public class Keyboard2View extends View
|
||||
float y = _tc.margin_top;
|
||||
for (KeyboardData.Row row : _keyboard.rows)
|
||||
{
|
||||
y += row.shift * _config.keyHeight;
|
||||
y += row.shift * _tc.row_height;
|
||||
float x = _marginLeft + _tc.margin_left;
|
||||
float keyH = row.height * _config.keyHeight - _tc.vertical_margin;
|
||||
float keyH = row.height * _tc.row_height - _tc.vertical_margin;
|
||||
for (KeyboardData.Key k : row.keys)
|
||||
{
|
||||
x += k.shift * _keyWidth;
|
||||
@ -384,7 +384,7 @@ public class Keyboard2View extends View
|
||||
drawIndication(canvas, k, x, y, keyW, keyH, _tc);
|
||||
x += _keyWidth * k.width;
|
||||
}
|
||||
y += row.height * _config.keyHeight;
|
||||
y += row.height * _tc.row_height;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -94,14 +94,23 @@ public class Theme
|
||||
public final float horizontal_margin;
|
||||
public final float margin_top;
|
||||
public final float margin_left;
|
||||
public final float row_height;
|
||||
public final Paint indication_paint;
|
||||
|
||||
public final Key key;
|
||||
public final Key key_activated;
|
||||
|
||||
public Computed(Theme theme, Config config, float keyWidth)
|
||||
public Computed(Theme theme, Config config, float keyWidth, KeyboardData layout)
|
||||
{
|
||||
vertical_margin = config.key_vertical_margin * config.keyHeight;
|
||||
// Rows height is proportional to the keyboard height, meaning it doesn't
|
||||
// change for layouts with more or less rows. 3.95 is the usual height of
|
||||
// a layout in KeyboardData unit. The keyboard will be higher if the
|
||||
// layout has more rows and smaller if it has less because rows stay the
|
||||
// same height.
|
||||
row_height = Math.min(
|
||||
config.screenHeightPixels * config.keyboardHeightPercent / 100 / 3.95f,
|
||||
config.screenHeightPixels / layout.keysHeight);
|
||||
vertical_margin = config.key_vertical_margin * row_height;
|
||||
horizontal_margin = config.key_horizontal_margin * keyWidth;
|
||||
// Add half of the key margin on the left and on the top as it's also
|
||||
// added on the right and on the bottom of every keys.
|
||||
|
Loading…
x
Reference in New Issue
Block a user