Is there a way for Android to preprocess an html page (like PHP) using templates or whatever and then output the right HTML?
Example of what I mean.
Let's say I have a variable in android that holds a URL of an address or a file for JavaScript. I want to output the right script tags from Android preprocessing the file.
So in the Android activity there could be
String loc = "http://example.com/file.js"
and when I pass the loc using a webview JavascriptInterface thingy I want src from above to equal loc.
<script type="text/javascript" src="loc variable here"></script> //but how?
Also, dynamically add or remove scripts as needed. So, this sounds like a job for templates (like how Ruby On Rails ERB files work). But can Android do this? If so, how do you do it?
Thanks.
I ended up just using document.createElement("script") to dynamically load scripts instead of doing a template. It was a lot easier that way.
Related
The question might seem incomprehensible just from the title alone so let me elaborate on what I mean. From what little I've dabbled in HTML and JavaScript, you could add HTML lines to the HTML file from using a Javascript function in the script.js file and it would add those HTML lines you've written into the function to the HTML file on execution and it would work as if you've written it in the HTML file to begin with. That was my understanding of how it worked, at least, if I'm wrong on my assessment feel free to correct me on that matter.
Anyway, I'm wondering if we could do a similar thing in Android Studio where we can use a Kotlin function to add an XML line/attribute/command like 'app:srcCompat="#drawable/whatever"' to an XML file.
Of course the question doesn't come from a mere sense of wonder. I currently have an application with a fragment that's supposed to get some football teams from the Room database and display them in CardViews using RecyclerView. In those cards, the team's name and their logo should be displayed. I don't have logos as image files in the Room database itself, however there is a column that stores the names of the drawable files in which the team logos are stored. (For example: Team A's logo is stored in the drawable's as 'teama.png' and it has 'teama' stored in a column.)
In the Adapter class of the RecyclerView, I want to use the bind() function to put the name and the logo on the cards. What I'm expecting to do (related to my question overall) is using a function that can take a string parameter ("app:srcCompat="#drawable/teama"") and puts it to the XML file of my team item. Is this possible? I'm open to other solutions as well and can post code if requested.
Thank you for your answer beforehand.
Is there a way to add XML code to an XML file from a Kotlin code?
Yes, but not in the context of what you are asking.
What I'm expecting to do (related to my question overall) is using a function that can take a string parameter ("app:srcCompat="#drawable/teama"") and puts it to the XML file of my team item. Is this possible?
No. You cannot modify the content of a resource XML file at runtime.
From what little I've dabbled in HTML and JavaScript, you could add HTML lines to the HTML file from using a Javascript function in the script.js file and it would add those HTML lines you've written into the function to the HTML file on execution and it would work as if you've written it in the HTML file to begin with.
JavaScript, run in the browser, does not modify the HTML file on the server. It modifies the DOM: the parsed representation of the HTML that is used by the browser to render a UI on the screen.
Similarly, in Android, you will need to update the View objects — created from parsing that resource XML file — to reflect your desired name and logo. This approach is covered in books and courses on Android app development. FWIW, here is a free book of mine on the subject.
Till now this technology is not available and if it is available it's not that famous and in use
I have created a lot of UI working on Android platform.
There, I used xml. What happens in android is that
when you have a fairly large UI screen with multiple blocks/sections
putting up all the code inside one xml file could be messy.
So they have provided tag.
What it does is :
We can create separate xml files defining separate components
and these separate xml files can be included inside one parent
xml.
This keeps the code very modular, easy to maintain and easy to debug.
Very recently I started working on HTML for some Web App,
and there is huge/huge UI on one single page.
i.e. multiple tabs and multiple sections in them.
Now, I don't want to put in everything inside one single html file.
Is there way by which I can create separate files and display them
one at a time or as per required.
You can get Angular.js and then user ng-route together with a custom directive. It's pretty simple actually.
Download their stuff. And then call it on your HTML.
Also, add this script aswell: //ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular-route.min.js
Should be pretty easy and you might learn something new.
Here, let me give you a hand. Create a file called app.js, add the following inside:
var app = angular.module('myapp', ['ngRoute'])
app.directive("nameOfElement", function () {
return {
templateUrl:'badassPartial.html'
};
});
On your HTML put this: <html ng-app="myapp">
Then create the file badassPartial.html this will be the partial.
And all you gotta do now is call it like so wherever you want to call it in your HTML: <name-of-element></name-of-element>
Note, the <name-of-element></name-of-element> is the name that you declare in app.directive("nameOfElement", function () { but for every camelCase you add a '-'
Hope this does something for you.
Also, you will need to create a new directive for every partial and then call their element.
HtmlSpanner with css
I have found an library called HtmlSpanner that should help me with adding a html string with css to a TextView.
but i cant find any documentation on it except
(new HtmlSpanner()).fromHtml()
but nothing on how to include a css file to it or how i can create an TagManager on handeling the css
can anyone help me?
Out of the box HtmlSpanner does parse blocks, and is able to apply the CSS styles in those blocks to the text.
The code for that is in the StyleNodeHandler handler class.
Now the good news is that it's pretty easy to add new TagNodeHandler classes, and in your case all you'd need is to add one that
does the following:
List item
Read the "href" property from the CSS link
Retrieve the URL that the href points to and read it into a String
Parse the String into a CSS rule
Register that CSS rule
Steps 3 and 4 are already in the StyleNodeHandler class (in the parseCSSFromText method), so you'd only need to implement steps 1 and 2.
Here's a quick Gist of what you'd need to add:
link
I'm trying to create a cross platform app using Xamarin.Forms. As far as I know, the UI will be created from the code and the .axml file will be generated automatically.
Can I modify the .axml file to edit the UI? I tried editing but all that comes up is what is written in the code. ie: hello forms
UPDATE
public static Page GetMainPage ()
{
return new simplerow ();
}
In Xamarin.Forms you can create your pages from markup definitions that are shared across all platforms.
Typically you will write all your content pages using Xamarin.Forms, however you can mix-and-match native pages into an application should you so wish.
These shared common pages, written in Xamarin.Forms, will reside maybe in a PCL project, or a Shared Project so these can then be re-used in the platform-specific projects, each targeting a specific platform OS.
You can write these common pages, either in code, or in XAML. You can even choose to write some pages one way, and some the other if you so choose.
A Xamarin.Forms page is processed at runtime through the interpretation of the page composition that has been created.
Each control that is specified on a page, has its own platform specific renderer, behind the scenes, that will produce output that is targetted to that OS.
When writing Xamarin.Forms pages, for-the-most, you will start to learn a new way of creating pages that is abstracted from the intricacies of creating mobile applications on each different platform OS.
There is therefore no editable .axml that is generated etc as you will write your pages using Xamarin.Forms markup and controls, and even your own or other custom-controls to produce your own application pages.
The following link shows some examples of how to write XAML pages.
The following link shows some examples of how to write from code-behind pages.
Along with the previous answer re: .xaml instead of .axml, you need to remember to change the startup code in app.cs to use your new .xaml form. Replace the "new ContentPage {...};" with "new MyForm();" (where "MyForm" is the name of your shiny new XAML form).
EDIT: Downloaded the project from the dropbox link. Comments below...
I see several issues here. I think you may need to go through the walkthroughs and sample applications provided by Xamarin to get up to speed with the concepts behind XF apps.
First, you are trying to use an Activity as your application's page. In a Xamarin Forms app, it must be a View of some sort, not a platform-specific visual such as Activity.
Second, remove the "test.xml" file from your Android project's Resources/layout folder; while XAML files are indeed XML, they have an 1) have a file extension of .xaml and 2) belong in the shared project.
Here's what you need to do to get your project working: (I'm assuming you're using VS here, under Xamarin Studio, it's slightly different.)
Right-click your "testforms" shared project
Click Add from the context menu and select "New Item"
In the dialog that appears, select "Forms XAML Page" and in the Name area enter a name (such as "MyForm")
(If you're using XS, choose "New File" and "Forms ContentPage")
This will add two files to your project: a XAML file containing your layout (e.g.: MyForm.xaml), and a code-behind file (e.g.: MyForm.xaml.cs).
Open the XAML file, and modify the Label element so that the Text attribute is
Text = "Hello, World!"
Modify the body of GetMainPage in your App.cs to the following:
return new MyForm();
Run the app
Hope this helps!
You got it wrong. Forms are created either through code or XAML. No axml or anything persistent is generated at platform level, everything is done in runtime(XAML is sort of compiled at compile time).
So, modify either code or XAML if you wish to change something. Or, if you need something more demanding, than consider either subclassing an existing Renderer or create you own.
Is there a quick and dirty way to render HTML in a textblock in a fashion similar to Android's Html.fromHtml()? I am aware of how to manually parse it with something like the HtmlAgilityPack, but all I really want is for it to render like its source in the textblock.
If not naively then perhaps with a custom control of some sort and, no I don't want to render it as a web page.
Ok sorry it took so long. I all but forgot how to use git correctly and hadn't had the time to upload till now. This HtmlTextBlock offers a similar level of functionality as to that of its silverlight counterpart which is pretty close to the android equivalent. Its still a bit buggy at times when dealing with more complex tags like the html dtd tag but does the job....
WP7 Html Text Block. The design is largely based on this guy's Bringing-a-bit-of-html-to-silverlight-htmltextblock-makes-rich-text-display-easy. and rewriting the web browser related classes using html agility. One day I'll post the details but, blah... Not right now. lol
Update
Example of usage:
<local:HtmlTextBlock x:Name="htmlTextBlock" Canvas.Left="2" Canvas.Top="2" TextWrapping="Wrap" UseDomAsParser="true" Text="<p>Your Html here </p>" />
Note: Your html will have to be escaped such that < = < and > = >
For detailed usage see:
https://github.com/musicm122/WP7HtmlTextBlock-/blob/master/HtmlTextBlockTest/HtmlTextBlockTest/MainPage.xaml