Select text size

pull/183/head
M66B 5 years ago
parent 2ecbe4d3ab
commit 43fb1cd3ff

@ -268,7 +268,7 @@ public class ActivitySignature extends ActivityBase {
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
String link = etLink.getText().toString(); String link = etLink.getText().toString();
etText.setSelection(start, end); etText.setSelection(start, end);
StyleHelper.apply(R.id.menu_link, etText, link); StyleHelper.apply(R.id.menu_link, null, etText, link);
} }
}) })
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)
@ -276,7 +276,7 @@ public class ActivitySignature extends ActivityBase {
return true; return true;
} else } else
return StyleHelper.apply(action, etText); return StyleHelper.apply(action, findViewById(action), etText);
} }
private void onImageSelected(Uri uri) { private void onImageSelected(Uri uri) {

@ -351,7 +351,7 @@ public class FragmentAnswer extends FragmentBase {
int start = args.getInt("start"); int start = args.getInt("start");
int end = args.getInt("end"); int end = args.getInt("end");
etText.setSelection(start, end); etText.setSelection(start, end);
StyleHelper.apply(R.id.menu_link, etText, link); StyleHelper.apply(R.id.menu_link, null, etText, link);
} }
private void onDelete() { private void onDelete() {
@ -414,7 +414,7 @@ public class FragmentAnswer extends FragmentBase {
return true; return true;
} else } else
return StyleHelper.apply(action, etText); return StyleHelper.apply(action, view.findViewById(action), etText);
} }
public static class FragmentInfo extends FragmentDialogBase { public static class FragmentInfo extends FragmentDialogBase {

@ -1276,7 +1276,7 @@ public class FragmentCompose extends FragmentBase {
onMenuAnswer(); onMenuAnswer();
return true; return true;
case R.id.menu_clear: case R.id.menu_clear:
StyleHelper.apply(R.id.menu_clear, etBody); StyleHelper.apply(R.id.menu_clear, null, etBody);
return true; return true;
case R.id.menu_legend: case R.id.menu_legend:
onMenuLegend(); onMenuLegend();
@ -1464,7 +1464,7 @@ public class FragmentCompose extends FragmentBase {
fragment.show(getParentFragmentManager(), "account:color"); fragment.show(getParentFragmentManager(), "account:color");
return true; return true;
} else } else
return StyleHelper.apply(action, etBody); return StyleHelper.apply(action, view.findViewById(action), etBody);
} }
private void onActionRecordAudio() { private void onActionRecordAudio() {
@ -2768,7 +2768,7 @@ public class FragmentCompose extends FragmentBase {
int start = args.getInt("start"); int start = args.getInt("start");
int end = args.getInt("end"); int end = args.getInt("end");
etBody.setSelection(start, end); etBody.setSelection(start, end);
StyleHelper.apply(R.id.menu_color, etBody, color); StyleHelper.apply(R.id.menu_color, null, etBody, color);
} }
private void onLinkSelected(Bundle args) { private void onLinkSelected(Bundle args) {
@ -2776,7 +2776,7 @@ public class FragmentCompose extends FragmentBase {
int start = args.getInt("start"); int start = args.getInt("start");
int end = args.getInt("end"); int end = args.getInt("end");
etBody.setSelection(start, end); etBody.setSelection(start, end);
StyleHelper.apply(R.id.menu_link, etBody, link); StyleHelper.apply(R.id.menu_link, null, etBody, link);
} }
private void onActionDiscardConfirmed() { private void onActionDiscardConfirmed() {
@ -4848,17 +4848,17 @@ public class FragmentCompose extends FragmentBase {
return true; return true;
case KeyEvent.KEYCODE_B: case KeyEvent.KEYCODE_B:
if (etBody.hasSelection()) if (etBody.hasSelection())
return StyleHelper.apply(R.id.menu_bold, etBody); return StyleHelper.apply(R.id.menu_bold, null, etBody);
else else
return false; return false;
case KeyEvent.KEYCODE_I: case KeyEvent.KEYCODE_I:
if (etBody.hasSelection()) if (etBody.hasSelection())
return StyleHelper.apply(R.id.menu_italic, etBody); return StyleHelper.apply(R.id.menu_italic, null, etBody);
else else
return false; return false;
case KeyEvent.KEYCODE_U: case KeyEvent.KEYCODE_U:
if (etBody.hasSelection()) if (etBody.hasSelection())
return StyleHelper.apply(R.id.menu_underline, etBody); return StyleHelper.apply(R.id.menu_underline, null, etBody);
else else
return false; return false;
} }

@ -9,13 +9,18 @@ import android.text.style.RelativeSizeSpan;
import android.text.style.StyleSpan; import android.text.style.StyleSpan;
import android.text.style.URLSpan; import android.text.style.URLSpan;
import android.text.style.UnderlineSpan; import android.text.style.UnderlineSpan;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import androidx.appcompat.widget.PopupMenu;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class StyleHelper { public class StyleHelper {
static boolean apply(int action, EditText etBody, Object... args) { static boolean apply(int action, View anchor, EditText etBody, Object... args) {
Log.i("Style action=" + action); Log.i("Style action=" + action);
try { try {
@ -72,25 +77,41 @@ public class StyleHelper {
} }
case R.id.menu_size: { case R.id.menu_size: {
RelativeSizeSpan[] spans = ss.getSpans(start, end, RelativeSizeSpan.class); final int s = start;
float size = (spans.length > 0 ? spans[0].getSizeChange() : 1.0f); final int e = end;
final SpannableString t = ss;
// Match small/big
if (size == 0.8f)
size = 1.0f;
else if (size == 1.0)
size = 1.25f;
else
size = 0.8f;
for (RelativeSizeSpan span : spans)
ss.removeSpan(span);
if (size != 1.0f) PopupMenu popupMenu = new PopupMenu(anchor.getContext(), anchor);
ss.setSpan(new RelativeSizeSpan(size), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); popupMenu.getMenu().add(Menu.NONE, R.string.title_style_size_small, 1, R.string.title_style_size_small);
popupMenu.getMenu().add(Menu.NONE, R.string.title_style_size_medium, 2, R.string.title_style_size_medium);
popupMenu.getMenu().add(Menu.NONE, R.string.title_style_size_large, 3, R.string.title_style_size_large);
etBody.setText(ss); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
etBody.setSelection(start, end); @Override
public boolean onMenuItemClick(MenuItem item) {
RelativeSizeSpan[] spans = t.getSpans(s, e, RelativeSizeSpan.class);
for (RelativeSizeSpan span : spans)
t.removeSpan(span);
float size;
if (item.getItemId() == R.string.title_style_size_small)
size = 0.8f;
else if (item.getItemId() == R.string.title_style_size_large)
size = 1.25f;
else
size = 1.0f;
t.setSpan(new RelativeSizeSpan(size), s, e, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
etBody.setText(t);
etBody.setSelection(s, e);
return false;
}
});
popupMenu.show();
return true; return true;
} }

@ -867,6 +867,9 @@
<string name="title_style_italic">Italic</string> <string name="title_style_italic">Italic</string>
<string name="title_style_underline">Underline</string> <string name="title_style_underline">Underline</string>
<string name="title_style_size">Size</string> <string name="title_style_size">Size</string>
<string name="title_style_size_small">Small</string>
<string name="title_style_size_medium">Medium</string>
<string name="title_style_size_large">Large</string>
<string name="title_style_color">Color</string> <string name="title_style_color">Color</string>
<string name="title_style_clear">Clear formatting</string> <string name="title_style_clear">Clear formatting</string>
<string name="title_style_link">Insert link</string> <string name="title_style_link">Insert link</string>

Loading…
Cancel
Save