【问题标题】:Auto-generate Android Log TAG in Android Studio/Intellij idea在 Android Studio/Intellij IDEA 中自动生成 Android Log TAG
【发布时间】:2015-06-05 09:08:13
【问题描述】:

在 Intellij Idea 中,当我输入 psfs 然后按 Ctrl+J IDE 给我一个对话框:

当我按下 Enter 我得到一个

我知道在哪里可以自定义我自己的输出

但我无法提供任何文档说明如何编写自己的实时模板。

最后我想得到下一个结果:

键入:psfst -> 按 Ctrl+J -> 按 Enter

结果:

public static final String TAG = <currentClassName>.class.getSimpleName();

这会很有帮助,因为我有记录我的课程的习惯。

【问题讨论】:

    标签: java android android-studio intellij-idea live-templates


    【解决方案1】:

    在 Android Studio 中超级简单,只需输入 logt 并按 Tab

    它生成:private static final String TAG = "xyzActivity";

    【讨论】:

      【解决方案2】:

      对于 Kotlin,使用 private val TAG = $CLASS_NAME$::class.java.simpleName 作为模板文本并在 CLASS_NAME 的集合表达式中作为编辑变量中的 kotlinClassName()。

      【讨论】:

        【解决方案3】:

        对于使用 Android Studio 3Kotlin 的用户,有必要更改 Live Templates 的设置方式:

        编辑器 >> 实时模板 >> AndroidLog

        默认情况下仅适用于 Java

        按“更改”按钮添加 Kotlin 并检查 Kotlin

        然后它会再次工作!


        更新日期: 2020

        Android Studio: 3.6.2

        步骤:

        1. 添加
        2. 调用 logtk 是你想调用的任何东西
        3. 将此代码用作模板文本
        private val TAG = this::class.java.simpleName
        
        1. 添加说明
        2. 它是否适用于 Kotlin:在我的例子中,我只用于 Class

        2020 年 6 月更新

        不再需要设置任何东西。 Android Studio 4.0 默认带有这个功能。 Toast 也一样

        【讨论】:

          【解决方案4】:

          Android Studio 中已经存在这样的快捷方式 - 在光标位于类范围时写入 logt 并输入。

          更多:

          【讨论】:

          • 不完全是。它将生成模板为private static final String TAG = "<class_name>"; 未请求。但我会加分,因为这对它来说是 0.02 美元。
          【解决方案5】:

          另一种解决方案是不为每个类使用默认的 TAG,而是使用这种方法来获取 TAG:

          public class Utils {
                  public static String getTAG(Object o) {
                      StackTraceElement[] elements = Thread.currentThread().getStackTrace();
          
                      int position = 0;
                      for (int i = 0; i < elements.length; i++) {
                          if (elements[i].getFileName().contains(o.getClass().getSimpleName())
                                  && !elements[i+1].getFileName().contains(o.getClass().getSimpleName())){
                              position = i;
                              break;
                          }
                      }
          
                      StackTraceElement element = elements[position];
                      String className = element.getFileName().replace(".java", "");
                      return "[" + className + "](" + element.getMethodName() + ":" + element.getLineNumber() + ")";
                  }
          }
          

          来自 MainActivity 的示例调用 - onResume:

          Log.v(Utils.getTAG(this), "hello world");
          

          日志输出:

          [MainActivity](onResume:79): hello world
          

          【讨论】:

          • 其实不是关于自动生成TAG的答案。
          【解决方案6】:

          我找到了解决办法

          1) 在普通组中创建一个新的实时模板
          2) 在模板文本中:

          private static final String TAG = $CLASS_NAME$.class.getSimpleName();
          

          3)定义使用范围:

          4) 选择快捷方式:

          最后点击Edit variables并将表达式值改为className()

          点击OkApplyOk并使用。

          【讨论】:

          • 很棒的提示。作为建议,您可以使用 private 而不是 public,因为您为每个类设置了一个标签。
          • 我已通过此解决方案中提出的模板修改了logt 的默认模板。这真的是我想要的,也是应该实施的方式。谢谢!
          • @SergeyShustikov Kotlin 呢?
          • 这应该包含在 Android Studio 中
          猜你喜欢
          • 2013-06-11
          • 2016-10-15
          • 2015-08-18
          • 1970-01-01
          • 1970-01-01
          • 2015-08-21
          • 2015-10-16
          • 2013-08-20
          • 1970-01-01
          相关资源
          最近更新 更多