USB 経由でタブレットを使用して PIC システムと通信できるように、ハイパーテキストのようなアプリケーションを実装しようとしています。私のコンセプトは、2 つの EditText ビューを表示するフラグメントを作成することです。1 つはタブレットでコマンドを構成および編集できるようにするビューで、もう 1 つは双方向のすべてのトラフィックを保持するビューです。
構成された文字列をソートしてトラフィックビューに追加するところまで来ました。ただし、タブレットで生成された文字列を、PIC で生成された応答に使用される色とは異なる色で表示できるようにしたいと考えています。setSpan の多数の組み合わせと順列を試しましたが、うまくいきませんでした - 何かアイデアはありますか? 私はまた、同じ目的を達成するための他の方法にもオープンです。
私が使用しているJavaコードは次のとおりです。
package durdle.bruce.fragment_trial;
import android.app.Fragment;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
public class PanelFragment extends Fragment implements OnKeyListener
{
private final String TAG = "Panel Fragment:- ";
EditText cmdLine;
EditText traffic_panel;
int lineCount = 0;
CharSequence cs;
CharSequence nextLine;
SpannableStringBuilder cmdString;
SpannableStringBuilder traffic;
SpannableStringBuilder ss;
ForegroundColorSpan cmdTextColor;
ForegroundColorSpan trafTextColor;
String cntString;
char newLine = '\n';
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.textfragment,container, false);
cmdLine = (EditText) view.findViewById(R.id.enterCmd);
cmdLine.setOnKeyListener(this);
cmdTextColor = new ForegroundColorSpan(0x0000FF);
trafTextColor = new ForegroundColorSpan(0xFF0000);
traffic = new SpannableStringBuilder();
return view;
}
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER))
{
traffic_panel = (EditText) getView().findViewById(R.id.detailsText);
cmdString = (SpannableStringBuilder) cmdLine.getText();
Log.d(TAG,"ENTER pressed " + cmdString);
cs = String.valueOf(lineCount) + "-" + '\n';
ss = new SpannableStringBuilder(cs);
ss.setSpan(trafTextColor,0,ss.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
traffic = traffic.append(ss);
cmdString.setSpan(cmdTextColor,0,cmdString.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
nextLine = cmdString.append(newLine);
traffic = traffic.append(nextLine);
Log.d(TAG, "traffic string = " + traffic);
((TextView) traffic_panel).setText(traffic);
cmdLine.setText("");
lineCount++;
}
return false;
}
}
Html.fromHtml を使用した作業コードは次のとおりです。
package durdle.bruce.fragment_trial;
import android.app.Fragment;
import android.os.Bundle;
import android.text.Html;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
public class PanelFragment extends Fragment implements OnKeyListener
{
private final String TAG = "Panel Fragment:- ";
EditText cmdLine;
TextView traffic_panel;
int lineCount = 0;
int oldTrafficLength;
int newTrafficLength;
CharSequence cs;
CharSequence nextLine;
SpannableStringBuilder cmdString;
SpannableStringBuilder traffic;
SpannableStringBuilder ss;
ForegroundColorSpan cmdTextColor;
ForegroundColorSpan trafTextColor;
String cntString;
char newLine = '\n';
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.textfragment,container, false);
cmdLine = (EditText) view.findViewById(R.id.enterCmd);
cmdLine.setOnKeyListener(this);
cmdTextColor = new ForegroundColorSpan(0xFF0000);
trafTextColor = new ForegroundColorSpan(0x0000FF);
traffic = new SpannableStringBuilder();
return view;
}
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER))
{
traffic_panel = (TextView) getView().findViewById(R.id.detailsText);
cmdString = (SpannableStringBuilder) cmdLine.getText();
Log.d(TAG,"ENTER pressed " + cmdString);
cmdString = cmdString.append(newLine);
lineCount++;
cs = String.valueOf(lineCount) + "-" + '\n';
traffic = traffic.append(Html.fromHtml("<font color=\"blue\">" + cs + "</font>"));
traffic = traffic.append('\n');
traffic = traffic.append(Html.fromHtml("<font color=\"red\">" + cmdString + "</font>"));
traffic.append('\n');
((TextView) traffic_panel).setText(traffic);
cmdLine.setText("");
}
return false;
}
}