package com.javalive09.codebag.logger; import android.graphics.Typeface; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.Editable; import android.text.TextWatcher; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ScrollView; import com.javalive09.codebag.EntryTreeActivity; import com.javalive09.codebag.R; /** * Created by peter on 2017/3/22. */ public class LogFragment extends Fragment { private LogView mLogView; private ScrollView mScrollView; private boolean autoScroll; private static final long MAX = 20; //M public LogFragment() { } public View inflateViews() { ViewGroup.LayoutParams scrollParams = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); mScrollView.setLayoutParams(scrollParams); mLogView = new LogView(getActivity()); ViewGroup.LayoutParams logParams = new ViewGroup.LayoutParams(scrollParams); logParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; mLogView.setLayoutParams(logParams); mLogView.setClickable(true); mLogView.setFocusable(true); mLogView.setTypeface(Typeface.MONOSPACE); // Want to set padding as 16 dips, setPadding takes pixels. Hooray math! int paddingDips = 16; double scale = getResources().getDisplayMetrics().density; int paddingPixels = (int) ((paddingDips * (scale)) + .5); mLogView.setPadding(paddingPixels, paddingPixels, paddingPixels, paddingPixels); mLogView.setCompoundDrawablePadding(paddingPixels); mLogView.setGravity(Gravity.BOTTOM); mLogView.setTextAppearance(getActivity(), android.R.style.TextAppearance_Holo_Small); mScrollView.addView(mLogView); return mScrollView; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mScrollView = (ScrollView) inflater.inflate(R.layout.scroll_view, container, false); mScrollView.setBackgroundResource(R.color.log_bg_color); View result = inflateViews(); mLogView.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if(autoScroll) { mScrollView.post(scrollToBottom); } int len = mLogView.getText().toString().getBytes().length; int currentLen = len /1024 / 1024; //M if(currentLen > ((EntryTreeActivity)getActivity()).getMaxLog()) { clear(); } } }); return result; } private Runnable scrollToBottom = new Runnable() { @Override public void run() { mScrollView.fullScroll(ScrollView.FOCUS_DOWN); } }; public void setAutoScroll(boolean autoScroll) { this.autoScroll = autoScroll; } public LogView getLogView() { return mLogView; } public void show(boolean show) { if (show) { getView().setVisibility(View.VISIBLE); } else { getView().setVisibility(View.GONE); } } public void clear() { mLogView.setText("---"); } }