Coder Social home page Coder Social logo

magicviews's People

Contributors

ikocijan avatar jmarkovic avatar reisub avatar zplesac avatar zzz6519003 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

magicviews's Issues

Add TabLayout

Hello Ivan, it would be great to have MagicTabLayout so we can change fonts :)

Use the new AppCompat views which backport functionality

As per this blog post:
http://android-developers.blogspot.com/2015/04/android-support-library-221.html

There are new views which backport some cool stuff to pre-lollipop devices:

  • AppCompatAutoCompleteTextView
  • AppCompatButton
  • AppCompatCheckBox
  • AppCompatCheckedTextView
  • AppCompatEditText
  • AppCompatMultiAutoCompleteTextView
  • AppCompatRadioButton
  • AppCompatRatingBar
  • AppCompatSpinner
  • AppCompatTextView

We should extend these for a future MagicViews release.

MagicTextView does not work in IDE (Android Studio)

MagicTextView cannot be shown in the IDE because of the following exception:

java.lang.UnsupportedClassVersionError: com/ivankocijan/magicviews/views/MagicTextView : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:471)
    at com.intellij.util.lang.UrlClassLoader._defineClass(UrlClassLoader.java:189)
    at com.intellij.util.lang.UrlClassLoader.defineClass(UrlClassLoader.java:185)
    at com.intellij.util.lang.UrlClassLoader.findClass(UrlClassLoader.java:146)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at com.android.tools.idea.rendering.RenderClassLoader.loadClassFromJar(RenderClassLoader.java:76)
    at org.jetbrains.android.uipreview.ProjectClassLoader.loadClassFromModuleOrDependency(ProjectClassLoader.java:106)
    at org.jetbrains.android.uipreview.ProjectClassLoader.load(ProjectClassLoader.java:87)
    at com.android.tools.idea.rendering.RenderClassLoader.findClass(RenderClassLoader.java:54)
    at org.jetbrains.android.uipreview.ProjectClassLoader.findClass(ProjectClassLoader.java:54)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:174)
    at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:97)
    at com.android.tools.idea.rendering.LayoutlibCallback.loadView(LayoutlibCallback.java:172)
    at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207)
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:135)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:469)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:373)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:399)
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:336)
    at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:332)
    at com.android.tools.idea.rendering.RenderService$3.compute(RenderService.java:558)
    at com.android.tools.idea.rendering.RenderService$3.compute(RenderService.java:547)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:932)
    at com.android.tools.idea.rendering.RenderService.createRenderSession(RenderService.java:547)
    at com.android.tools.idea.rendering.RenderService.render(RenderService.java:674)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.doRender(AndroidLayoutPreviewToolWindowManager.java:586)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.access$1900(AndroidLayoutPreviewToolWindowManager.java:80)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$6$1.run(AndroidLayoutPreviewToolWindowManager.java:528)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178)
    at com.intellij.openapi.progress.ProgressManager.executeProcessUnderProgress(ProgressManager.java:209)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:212)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:171)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$6.run(AndroidLayoutPreviewToolWindowManager.java:523)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310)
    at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227)
    at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217)
    at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238)
    at com.intellij.util.Alarm$Request$1.run(Alarm.java:327)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)

Under-the-hood refactoring

While introducing the last PR ( #29 ), I've noticed that some classes keep a reference to the Context. This may be an undesirable since it only might be useful for initialisation.

I propose that the part that initialises typefaces is moved to MagicViews class and that MagicFonts remains the point where typefaces live and keep their references without any Context reference.

I'm willing to do this work, but would need to discuss every change as this may be a major release (if we choose to remove deprecated methods). Would you like future PRs to go to development branch or a new branch just for this?

Create attribute to enter complete font path

The library starts by finding every font in the assets folder. When there's a lot of file in the folder, this leads to unacceptable lag. It simply can't be used in some cases. There should be a way to disable finding every font in the assets folder and using a path to the font instead.

Give access to "fontStyle" attribute

fontStyle should be accessible by either a getter or by being protected.
I am extending MagicEditText to override the setError method so I can use the custom type face on that one also. However the font to use is in fontStyle.

I tried using FontUtils.getPrefFontStyle(context, attrs, PreferenceType.EDIT_TEXT_PREFERENCE); in the constructor, but for a reason I don't know after calling the super constructor, this method always returns null. I guess attrs gets modified along the way...

typeface already defined v1.0.3

When using as gradle dependency in AS 0.9.2 error is shown when compiling:
Typeface already defined - I don't have any custom attribute named typeface in the project - possible that it clashes with v7 or v4 compat lib?

Remove static Context reference

The MagicFont utility class now contains a static reference to the context.
This should be avoided as it can prevent the garbage collection of heavyweight objects, like activities or services.

Add spacing

Hi Ivan, it would be cool to add a feature to change space between characters, something similiar to this"

public class SpacingTextView extends MagicTextView {
private static final float NO_SPACING = 0.0f;

private float letterSpacing = NO_SPACING;


public SpacingTextView(Context context) {
    super(context);
    init();
}

public SpacingTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    getAttributes(attrs);
    init();
}

private void getAttributes(AttributeSet attrs) {
    if (attrs != null) {
        TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.SpacingTextView, 0, 0);
        letterSpacing = a.getFloat(R.styleable.SpacingTextView_tv_spacing, 0);
        a.recycle();
    }
}

private void init() {
    final float THRESHOLD = 0.001f;
    if (Math.abs(letterSpacing - NO_SPACING) > THRESHOLD) {
        String originalText = getText().toString();
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < originalText.length(); i++) {
            String c = "" + originalText.charAt(i);
            builder.append(c.toLowerCase());
            if (i + 1 < originalText.length()) {
                builder.append("\u00A0");
            }
        }

        SpannableString finalText = new SpannableString(builder.toString();
        if (builder.toString().length() > 1) {
            for (int i = 1; i < builder.toString().length(); i += 2) {
                finalText.setSpan(new ScaleXSpan(letterSpacing), i, i + 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
            }
        }

        setText(finalText, TextView.BufferType.SPANNABLE);
    }
}

}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.