Мы должны сохранить строки формата в ресурсах?

Используйте этот пользовательский ImageView в Xml

public class RoundedCornerImageView extends ImageView {

    public RoundedCornerImageView(Context ctx, AttributeSet attrs) {
        super(ctx, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        Drawable drawable = getDrawable();
        if (drawable == null) {
            return;
        }

        if (getWidth() == 0 || getHeight() == 0) {
            return;
        }
        Bitmap b = ((BitmapDrawable) drawable).getBitmap();
        Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);
        int w = getWidth(), h = getHeight();
        Bitmap roundBitmap = getRoundedCroppedBitmap(bitmap, w);
        canvas.drawBitmap(roundBitmap, 0, 0, null);
    }

    public static Bitmap getRoundedCroppedBitmap(Bitmap bitmap, int radius) {
        Bitmap finalBitmap;
        if (bitmap.getWidth() != radius || bitmap.getHeight() != radius)
            finalBitmap = Bitmap.createScaledBitmap(bitmap, radius, radius,
                    false);
        else
            finalBitmap = bitmap;
        Bitmap output = Bitmap.createBitmap(finalBitmap.getWidth(),
                finalBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, finalBitmap.getWidth(),
                finalBitmap.getHeight());

        final RectF rectf = new RectF(0, 0, finalBitmap.getWidth(),
                finalBitmap.getHeight());

        paint.setAntiAlias(true);
        paint.setFilterBitmap(true);
        paint.setDither(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(Color.parseColor("#BAB399"));
        //Set Required Radius Here
        int yourRadius = 7;
        canvas.drawRoundRect(rectf, yourRadius, yourRadius, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(finalBitmap, rect, rect, paint);

        return output;
    }

}
.
25
задан Nick Haddad 8 June 2009 в 03:21
поделиться

4 ответа

Я действительно думаю, что это неизбежное зло, которое я часто использовал. Что-то неприятное, что я делаю, это:

// "{0}{1}{2}: Some message. Some percentage: {3}%"
string someString = string.Format(Properties.Resources.SomeString
                                  ,token1, token2, token3, number);

... по крайней мере, пока код не станет достаточно стабильным, чтобы я мог смутиться, увидев это другими.

19
ответ дан 28 November 2019 в 21:08
поделиться

Есть несколько причин, по которым вы захотите это сделать, но единственная серьезная причина - если вы собираетесь локализовать свое приложение на другой язык.

Если вы используете строки ресурсов, следует помнить о нескольких вещах.

  1. По возможности включайте строки формата в набор строк ресурсов, которые вы хотите локализовать. Это позволит переводчику изменить порядок расположения отформатированных элементов, чтобы они лучше соответствовали контексту переведенного текста.

  2. Избегайте наличия строк в ваших токенах формата, которые находятся на вашем языке. Лучше использовать это для чисел. Например, сообщение:

    «Указанное вами значение должно находиться в диапазоне от {0} до {1}»

    отлично подходит, если {0} и {1} являются числами, такими как 5 и 10. Если вы форматируете в такие строки, как «пять» и «десять», это затруднит локализацию.

  3. Вы можете решить проблему читабельности, о которой вы говорите, просто правильно назвав свои ресурсы.

    string someString = string.Format (Properties. Resources.IntegerRangeError, minValue, maxValue);

  4. Оцените, генерируете ли вы видимые для пользователя строки на правильном уровне абстракции в вашем коде. В общем, я стараюсь сгруппировать все видимые пользователю строки в коде, максимально приближенном к пользовательскому интерфейсу. Если какой-либо код ввода-вывода файла низкого уровня должен выдавать ошибки, он должен делать это с исключениями, которые вы обрабатываете в своем приложении, и с последовательными сообщениями об ошибках. Это также объединит все ваши строки, требующие локализации, вместо того, чтобы добавлять их в код.

17
ответ дан 28 November 2019 в 21:08
поделиться

Чтобы помочь добавить жестко закодированные строки или даже ускорить добавление строк в файл ресурсов, вы можете использовать CodeRush Xpress, который можно бесплатно скачать здесь: http: / /www.devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/

После того, как вы напишете строку, вы можете получить доступ к меню CodeRush и извлечь его в файл ресурсов за один шаг. Очень хорошо.

Resharper имеет аналогичную функциональность .

3
ответ дан 28 November 2019 в 21:08
поделиться

Я не понимаю, почему включение строки формата в программу - это плохо. В отличие от традиционных недокументированных магических чисел, с первого взгляда совершенно очевидно, что он делает. Конечно, если вы используете строку формата в нескольких местах, она обязательно должна быть сохранена в соответствующей переменной только для чтения, чтобы избежать избыточности.

Я согласен, что сохранение ее в ресурсах здесь не является необходимым косвенным указанием. Возможное исключение - если вашу программу нужно локализовать, и вы локализуете ее с помощью файлов ресурсов.

2
ответ дан 28 November 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: