简体   繁体   English

如何在 textview 中设置文本并将其格式化为代码? (安卓 Java)

[英]How set text in textview and formatted it as code? (Android Java)

So the question is this.所以问题是这个。 I'm writing the app and I want to show part of "java code" in TextView, so when I set Text in TextView it looks like a simple text.我正在编写应用程序,我想在 TextView 中显示“java 代码”的一部分,所以当我在 TextView 中设置 Text 时,它看起来像一个简单的文本。

Is it possible to show the "code" like code with all tag color, etc?是否可以使用所有标签颜色等显示“代码”之类的代码?

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import br.tiagohm.codeview.Language;
import br.tiagohm.codeview.Theme;
import io.github.kbiakov.codeview.CodeView;


/**
 * A simple {@link Fragment} subclass.
 */
public class FragmentActivityTop extends Fragment implements br.tiagohm.codeview.CodeView.OnHighlightListener {
    CodeView mCodeView;
int tag=0;
    public FragmentActivityTop() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        //CodeProcessor.init(getContext());
        View v =inflater.inflate(R.layout.activity_fragment_top, container, false);

        //CodeView codeView = (CodeView) v.findViewById(R.id.code_viewjava);

        String code = "   @Override\n" +
                "    public View onCreateView(LayoutInflater inflater, ViewGroup container,\n" +
                "                             Bundle savedInstanceState) {\n" +
                "        // Inflate the layout for this fragment\n" +
                "        View v = inflater.inflate(R.layout.fragment_xml, container, false);\n" +
                "\n" +
                "        WebView webView = (WebView)v.findViewById(R.id.webfragxml);";


        mCodeView = (CodeView)v.findViewById(R.id.codeView);

        mCodeView.setOnHighlightListener(this)
                .setOnHighlightListener(this)
                .setTheme(Theme.AGATE)
                .setCode(code)
                .setLanguage(Language.JAVA)
                .setWrapLine(true)
                .setFontSize(14)
                .setZoomEnabled(true)
                .setShowLineNumber(true)
                .setStartLineNumber(9000)
                .apply();

        return v;
    }


    @Override
    public void onStartCodeHighlight() {

    }

    @Override
    public void onFinishCodeHighlight() {

    }

    @Override
    public void onLanguageDetected(Language language, int i) {

    }

    @Override
    public void onFontSizeChanged(int i) {

    }

    @Override
    public void onLineClicked(int i, String s) {

    }
}

This is my Fragment code when I trying to do this: mCodeView.setOnHighlightListener(this)这是我尝试执行此操作时的 Fragment 代码: mCodeView.setOnHighlightListener(this)

setOnHightkightListener paint are in red. setOnHightkightListener 油漆是红色的。

08-19 18:30:37.308 17929-17929/tj.horun.las.learnandroidstudio D/AndroidRuntime: Shutting down VM


                                                                             --------- beginning of crash

08-19 18:30:37.314 17929-17929/tj.horun.las.learnandroidstudio E/AndroidRuntime: FATAL EXCEPTION: main Process: tj.horun.las.learnandroidstudio, PID: 17929 android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class io.github.kbiakov.codeview.CodeView Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class io.github.kbiakov.codeview.CodeView Caused by: java.lang.ClassNotFoundException: Didn't find class "io.github.kbiakov.codeview.CodeView" on path: DexPathList[[zip file "/data/app/tj.horun.las.learnandroidstudio-1/base.apk", zip file "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_dependencies_apk.apk", zip file "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_0_apk.apk", zip file "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_1_apk.apk", zip file "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_2_apk.apk", zip file "/data/app/tj.horun.las.learnandroidstudio-1/split 08-19 18:30:37.314 17929-17929/tj.horun.las.learnandroidstudio E/AndroidRuntime:致命异常:主进程:tj.horun.las.learnandroidstudio,PID:17929 android.view.Inflate XML 文件行异常: #8:二进制 XML 文件行 #8:错误膨胀类 io.github.kbiakov.codeview.CodeView 引起:android.view.InflateException:二进制 XML 文件行 #8:错误膨胀类 io.github.kbiakov.codeview.CodeView引起:java.lang.ClassNotFoundException:在路径上没有找到类“io.github.kbiakov.codeview.CodeView”:DexPathList[[zip file“/data/app/tj.horun.las.learnandroidstudio-1/base .apk", 压缩文件 "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_dependencies_apk.apk", 压缩文件 "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_0_apk.apk",压缩文件“/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_1_apk.apk”,压缩文件“/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_2_apk.apk”,压缩文件“/数据/应用程序/tj.horun.las.learnandroidstudio-1/split _lib_slice_3_apk.apk", zip file "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_4_apk.apk", zip file "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_5_apk.apk", zip file "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_6_apk.apk", zip file "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_7_apk.apk", zip file "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_8_apk.apk", zip file "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/tj.horun.las.learnandroidstudio-1/lib/arm64, /system/lib64, /vendor/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:380) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.view.LayoutInflater.createView(LayoutInflater.java:609) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:787) at android.view.LayoutInflater.createViewFro _lib_slice_3_apk.apk", 压缩文件 "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_4_apk.apk", 压缩文件 "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_5"_apk.apk. , 压缩文件“/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_6_apk.apk”,压缩文件“/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_7_apk.apk”,压缩文件“ /data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_8_apk.apk", zip 文件 "/data/app/tj.horun.las.learnandroidstudio-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/ app/tj.horun.las.learnandroidstudio-1/lib/arm64, /system/lib64, /vendor/lib64]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 在 java.lang.ClassLoader.loadClass (ClassLoader.java:380) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.view.LayoutInflater.createView(LayoutInflater.java:609) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:第787章) mTag(LayoutInflater.java:727) at android.view.LayoutInflater.rInflate(LayoutInflater.java:858) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:518) at android.view.LayoutInflater.inflate(LayoutInflater.java:426) at tj.horun.las.learnandroidstudio.LayoutFragment.onCreateView(LayoutFragment.java:28) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2239) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1332) at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1574) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1641) at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:794) at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2415) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2200) at android.support mTag(LayoutInflater.java:727) at android.view.LayoutInflater.rInflate(LayoutInflater.java:858) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java) :518) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:426) 在 tj.horun.las.learnandroidstudio.LayoutFragment.onCreateView(LayoutFragment.java:28) 在 android.support.v4.app.Fragment.performCreateView( Fragment.java:2239) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1332) 在 android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1574) 在 android.support.v4 .app.FragmentManagerImpl.moveToState(FragmentManager.java:1641) at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:794) at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2415) ) 在 android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2200) 在 android.support .v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2153) at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2034) at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:651) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) at android.support.v4.view.ViewPager.populate(ViewPager.java:1239) at android.support.v4.view.ViewPager.populate(ViewPager.java:1087) at android.support.v4.view.ViewPager$3.run(ViewPager.java:270) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874) at android.view.Choreographer.doCallbacks(Choreographer.java:686) at android.view.Choreographer.doFrame(Choreographer.java:618) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:241) at android.a .v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2153) 在 android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2034) 在 android.support.v4.app.BackStackRecord.commitNowAllowingStackRecord.java( :651) 在 android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) 在 android.support.v4.view.ViewPager.populate(ViewPager.java:1239) 在 android.support.v4.view。 ViewPager.populate(ViewPager.java:1087) at android.support.v4.view.ViewPager$3.run(ViewPager.java:270) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874) at android。 view.Choreographer.doCallbacks(Choreographer.java:686) at android.view.Choreographer.doFrame(Choreographer.java:618) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860) at android.os.Handler .handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:241) 在 android.a pp.ActivityThread.main(ActivityThread.java:6274) 08-19 18:30:37.315 17929-17929/tj.horun.las.learnandroidstudio E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) pp.ActivityThread.main(ActivityThread.java:6274) 08-19 18:30:37.315 17929-17929/tj.horun.las.learnandroidstudio E/AndroidRuntime:在 java.lang.reflect.Method.invoke(Native Method) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

您可以使用此库来启用代码突出显示。

您可以使用CodeView库并为您想要的语言设置配置,然后只需使用 setText,它将以您想要的任何颜色突出显示,您可以在运行时更改主题。

yeah, its possible to do using html.是的,它可以使用 html 来完成。 You can use Html.fromHtml() to set text like java code and color.您可以使用 Html.fromHtml() 来设置诸如 java 代码和颜色之类的文本。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM